2015-06-21 5 views
1

Я пишу сценарий HTA «Opslag.hta», из которого я хочу, чтобы открыть еще один HTA скрипт «UPDATE.HTA».objShell.Run Ошибка: Файл не найден

Я пытаюсь открыть «UPDATE.HTA», который находится в папке (в том числе) для первичного сценария:

Set objShell = CreateObject("WScript.Shell") 
UpdatePath = "include\update.hta" 
objShell.Run (chr(34) & UpdatePath & chr(34)) 

Однако я получаю ошибку «Файл не Найдено ", и когда мне будет предложено продолжить выполнение скриптов и нажмите « Да »« update.hta » действительно открывается.

Я попытался переместить скрипт «update.hta» в разные местоположения и даже попытался указать полный путь для «update.hta» в «UpdatePath». Я пробовал с vbQuote, двойной обратной косой чертой (поскольку «Opslag.hta» находится в пути с пробелами) и все возможные решения, которые я смог найти, без успеха.

Эта тема: File not found when using objshell.run -- vbscript, не помогла мне, к сожалению.

Я работаю на Windows 7, 64 бит - не знаю, имеет ли это какое-либо отношение к нему.

Я действительно надеюсь, что у кого-то есть ответ, поскольку я собираюсь получить орехи! =)

Спасибо заранее!

+1

Если «update.hta« фактически открывается », значит, ошибка« Файл не найден »должен быть вызван кодом, который вы не опубликовали. –

+3

Похоже, что ошибка генерируется внутри 'update.hta' –

+1

Когда возникает ошибка, откройте диспетчер задач и проверьте, есть ли два процесса mshta.exe. Если это так, то ошибка вызвана вторым HTA. – omegastripes

ответ

0

Примечание: Я не уверен, что это на самом деле ответ, но по просьбе ... это, как я видел его:

Чтение кода

Set objShell = CreateObject("WScript.Shell") 
UpdatePath = "include\update.hta" 
objShell.Run (chr(34) & UpdatePath & chr(34)) 

есть две альтернативы

  1. update.hta не может быть найден. В этом случае будет ошибка, и файл hta не будет открыт
  2. update.hta можно найти. В этом случае ошибки не будет и файл hta будет открыт

Но ни один из этих альтернатив не соответствует наблюдаемому поведению. Файл hta открыт, поэтому он найден. Но отображается ошибка. Поскольку код вызывающего не содержит ничего, что могло бы привести к ошибке, источник ошибки должен быть в вызываемом файле.

+0

Ну, ваш вывод помог мне найти ошибку, поэтому я принимаю ваш ответ. – Sparcx

1

Хм, похоже, у вас уже есть ответ на проблему.

Возможно, стоит попросить соответствующего комментатора опубликовать свой ответ, чтобы вы могли отметить его как ответ.

Всякий раз, когда я работаю с путями, я получаю параноик об использовании относительных путей. Как правило, попробуйте использовать абсолютные имена путей вместо относительных путей.

Для вашего конкретного примера мы должны попытаться получить абсолютный путь от update.hta от Opslag.hta. Мы можем сделать это, используя document.location из HTML Dom. Например, на моем компьютере, я Opslag.hta под C:\Temp\HTA\Opslag.hta:

  1. document.href возвращает "file:///C:/Temp/HTA/Opslag.hta"
  2. Таким образом, некоторые строки манипуляции требуется, чтобы превратить его в "C:\Temp\HTA\Opslag.hta"
  3. Тогда мы можем использовать FileSystemObject для извлечения "C:\Temp\HTA" папка.

Другой совет: Chr (34) - это то же самое, что и "" "". Как правило, если вы хотите избежать двойных кавычек в VBScript, вы используете пару двойных кавычек. например Если вы хотите John says: "Hello!" в качестве строки VBScript, это "John says: ""Hello!""".

Вот пример, иллюстрирующий результат:

<!DOCTYPE html> 
<head> 
<title>Opslag.hta test</title> 
</head> 
<body> 
</body> 
<script language="VBScript"> 
Set objShell = CreateObject("WScript.Shell") 
Set objFSO = CreateObject("Scripting.FileSystemObject") 
htaPath = Replace(Replace(document.location, "file:///", ""), "/", "\") 
htaFolder = objFSO.GetParentFolderName(htaPath) 
updatePath = htaFolder + "\include\update.hta" 
MsgBox updatePath 
objShell.Run """" & updatePath & """" 
</script> 
</html> 

Кстати, это всего лишь пример.Обычно я не ставил большие скрипты после <body>, но это, как правило, хорошая практика, если ваш <script> работает с HTML Document, что вы ждете загрузки всего DOM, т. Е. Разместите его после <body>.

Смежные вопросы