1

我有一个使用另一个对象的 VBScript。

有时该对象会卡住。我的 VBScript 代码将挂在该行上,直到它“完成”。当它超时时,我想在 VBScript 关闭之前将 .Close 命令发送到对象。

如何判断我的 VBScript 何时超时?

我知道我可以把 WScript.Timeout = 60

也许像..

WScript.Timeout = 5
do while true

loop

sub WScript_timeout()
    msgbox("OK")
end sub
4

2 回答 2

1

通过设置Timeout属性,您可以指示解释器在计时器到期时自动终止脚本。这与使用该选项运行解释器相同,//T:xx并且无法从脚本中捕获/处理。你想要的需要异步运行代码的能力,而 VBScript 并不真正支持。

于 2013-04-20T10:40:48.550 回答
0

真正的答案(对于“我如何判断我的VBScript何时超时?”的问题)是您不能. 与几乎所有脚本一样,如果 VBScript 停止运行(因为它已超时),正在运行的线程将停止运行,因此它无法报告其状态。

但是有一个解决方案。但是,它需要一些狡猾。

如果您改为运行批处理脚本,无论您在何处使用该脚本来启动的批处理脚本(例如,batch_1.bat包括这一行:CALL batch_2.bat),第二个脚本将运行,但第一个脚本将等待。

第一个脚本的处理一直在等待(在 CALL 处),直到脚本 2 停止运行:此时,控制权返回到脚本 1,该脚本继续执行 CALL 之后的任何代码,该代码可能用于报告脚本的事实2已结束——

CALL batch_2.bat
ECHO The batch_2.bat script has stopped running && cmd /k

有一些方法可以启动 batch_2.bat而不会导致 batch_1.bat 暂停,直到第二个脚本完成,但它们在这里无关紧要。

理论上,批处理脚本不支持并行处理。VBScript 当然也不是。但是上述技术展示了一种方法,通过这种方法,可以通过一种方式在批处理脚本中实现并行处理——这使得它在 vbScript 上成为一体

.

如果脚本挂起,确定 vbScript 将超时的一种方法使用WScript函数在您的 .vbs 文件中,并将Windows 脚本主机设置设置为(例如)30 秒后超时 -

一个。打开“Windows 脚本宿主设置”对话框:

  1. 转到:开始 > 运行
  2. 在“打开”框中,键入:WSCRIPT
  3. 单击“确定”。

。设置超时,在 WSH 运行时发生:

  1. 选择选项:“在指定秒数后停止脚本”。

  2. 在“秒”框中,键入要应用于所有脚本的时间限制(默认为 10 秒)。

.

这是一个查找并显示当前WSH/WScript 超时设置的函数(如果它显示此设置尚未设置,请设置它) -

WScript.Echo("WSH timeout: " + WScript.Timeout);

.

该选项//T:xx不能使用,因为它是一个CScript函数,在 WScript 中不起作用,因此不能在 .vbs vbScript 文件中使用。

.

于 2019-04-09T09:51:33.667 回答