Получить возможную синтаксическую ошибку при вызове VBScript без ожидания до конца - PullRequest
1 голос
/ 12 июня 2019

Я сейчас запускаю VBScript из другого VBScript через WScript.Exec, не дожидаясь его результата (который работает просто отлично):

Set ObjShell = CreateObject("WScript.Shell")
Set ShellExec = ObjShell.Exec(strFinalCommand)
Set ShellExec = Nothing
Set ObjShell = Nothing

Я только что обнаружил проблему, если у второго скрипта (который имеет свою собственную обработку ошибок внутри) есть синтаксическая проблема.

Поскольку это определяется до запуска скрипта, я не могу заметить ошибку во втором скрипте, но вместо этого должен обработать ее в первом.

Есть ли возможность проверить, не вызвал ли вызов ошибку при запуске, и - если нет, просто дать ему работать - если есть ошибка, остановите wscript и получите текст ошибки.

Пока что я не нашел ничего по такой конкретной теме.

Я уже пробовал ShellExec.ExitCode и ShellExec.StdErr, но они оба обновляются только после завершения второго скрипта. Если есть ошибка, оба не обновляются. Я также попробовал ShellExec.SdtErr.AtEndOfStream, который прервал мой процесс при появлении ошибки.

Edit: Команду, которую я запускаю, составляет wscript.exe D:\\...\RunAsyncShell.vbs /ParamOne:123 /ParamTwo:ABC с примерно на 10 параметров больше (не может показать точный вызов из-за правил компании).

1 Ответ

0 голосов
/ 12 июня 2019

Вы можете сделать что-то вроде этого:

Set ObjShell = CreateObject("WScript.Shell")
Set ShellExec = ObjShell.Exec(strFinalCommand)

limit = DateAdd("s", 2, Now)
Do While ShellExec.Status = 0 And Now < limit
    WScript.Sleep 100
Loop

If ShellExec.ExitCode <> 0 Then
    WScript.Echo "Script failed."
End If

Это будет ждать до 2 секунд после запуска второго сценария и сообщать об ошибке, если процесс вернул ненулевой код завершения в течение этого периода времени. Однако вам, вероятно, придется запустить второй сценарий с cscript.exe вместо wscript.exe, поскольку последний будет отображать всплывающее окно при возникновении синтаксической ошибки, и процесс не завершится, пока вы не нажмете это всплывающее окно.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...