Параметр wscript.quit недоступен на уровне ошибок пакета - PullRequest
2 голосов
/ 18 октября 2011

Простой VBScript, содержащий одну строку wscript.quit(2), вызываемый из пакетного сценария, не передает значение параметра quit в переменную уровня ошибки пакета, как это должно быть - пакетный файл только отображает уровень ошибки по умолчанию (0).

Я недавно удалил VB6 (необходимо для чистой установки VB.net), и я думаю, что это может быть, по крайней мере, частью проблемы. При создании обходного пути для передачи результатов окна сообщения VBScripting в вызывающий пакетный файл я обнаружил, что объект файловой системы сценариев (scrrun.dll) не был зарегистрирован при удалении, и необходимо было перерегистрировать его в создать экземпляр объекта. Мне интересно, есть ли какая-то другая зависимость, которая требуется wscript.exe для предоставления функции quit доступа к переменной уровня ошибок пакета.

Я запустил wscript.exe в Обходчик зависимостей для вышеупомянутого однострочного VBScript, и единственное сообщение об ошибке, которое я получил во время выполнения, было следующим:

GetProcAddress (0x755C0000 [MSCTFIME.IME], "ImeGetImeMenuItems") вызывается из "IMM32.DLL" по адресу 0x76397354 и возвращает NULL. Ошибка: указанная процедура не найдена (127).

Сценарий завершен с правильным выходом кодом (2).

Упомянутая dll существует в папке System32 с WScript и не подлежит регистрации.

Я использую WinXP со всеми последними обновлениями.

Любые идеи будут оценены.

1 Ответ

2 голосов
/ 18 октября 2011

Программы Windows GUI не предназначены для использования в консоли; поэтому они чаще всего возвращают False == 0 в ОС. Wscript.exe такая программа. Если вы хотите использовать .vbs из консольной программы .bat / .cmd / .exe, вызовите его через Cscript.exe .

Доказательства для Боба:

type el.vbs
WScript.Quit 2 ' no () when calling a Sub

echo %ERRORLEVEL%
0

cscript el.vbs

echo %ERRORLEVEL%
2  <======= cscript.exe sets ERRORLEVEL

type el.vbs
WScript.Quit 2 ' no () when calling a Sub

echo %ERRORLEVEL%
0  <======= ERRORLEVEL is (re)set to 0

wscript el.vbs

echo %ERRORLEVEL%
0  <======= wscript.exe does not set ERRORLEVEL

QED для VBScript 5.7.16599 * cscript 5.7

Обновление: благодаря комментарию Боба, я нашел

это правильно объяснение и способ устранения

доказательство:

echo %ERRORLEVEL%
0

start /wait wscript el.vbs

echo %ERRORLEVEL%
2

Таким образом, даже программы Windows GUI могут / будут сообщать о состоянии, возвращая соответствующее значение из _tWinMain - вам просто нужно / подождать (соответственно .Run (sCmd, nShow, True ), чтобы выбрать его до.

...