我当前正在通过WScript.Exec
从另一个VBScript启动一个VBScript,而没有等待其结果(效果很好):
Set ObjShell = CreateObject("WScript.Shell")
Set ShellExec = ObjShell.Exec(strFinalCommand)
Set ShellExec = Nothing
Set ObjShell = Nothing
如果第二个脚本(内部具有自己的错误处理)确实存在语法问题,我刚刚发现了一个问题。
由于这是在脚本开始运行之前确定的,因此我看不到第二个脚本中的错误,而不得不在第一个脚本中处理它。
是否有可能检查呼叫在开始时是否引发错误-如果没有,则让它正常工作 -如果出现错误,请停止wscript并获取错误文本。
到目前为止,在这个特定主题上我什么都没找到。
我已经尝试过ShellExec.ExitCode
和ShellExec.StdErr
,但是都只在第二个脚本完成后才进行更新。
如果有错误,则不会同时更新两者。
我还尝试了ShellExec.SdtErr.AtEndOfStream
,如果出现错误,它会使我的进程崩溃。
编辑:
我正在运行的Command是wscript.exe D:\\...\RunAsyncShell.vbs /ParamOne:123 /ParamTwo:ABC
,后面还有大约10个参数(由于公司规定,无法显示确切的调用)。
答案 0 :(得分:0)
您可以执行以下操作:
Form1
这将在启动第二个脚本后最多等待2秒钟,并且如果该进程在该时间段内返回了非零的退出代码,则会报告错误。但是,您可能必须使用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
而不是cscript.exe
运行第二个脚本,因为当发生语法错误时,后者将显示一个弹出窗口,并且在单击该弹出窗口之前该过程不会终止离开。