您可能会在我对这个问题的回答( https://stackoverflow.com/a/3742182/128427 )中找到一些有用的东西:如何让 HTA 自行重启?
它使用 VBScript 帮助程序等待进程结束(HTA 本身),然后重新启动 HTA。您可以修改 vbscript 以等待特定进程结束(您的安装程序之一),然后将控制权返回给 HTA,HTA 将启动下一个安装程序并再次调用等待脚本。
我不认为 HTA 可以调用 WScript.Sleep 例程,但是 HTA 中有 setTimeout 和 setInterval 方法在 X 秒后调用例程,或者在每 X 秒后重复调用例程直到被取消。您可以使用它们定期检查进程是否仍在运行(使用 WMI Win32_Process,如我在其他答案中所示)。
要处理这样的项目列表,而不是使用循环遍历列表并在每个项目之后暂停,您有一个中央状态机例程,它不时调用自身以推进系统。
'!! extremely "pseudo" pseudo-code follows
sub StartSystem()
state = "next program"
list = list of programs to install
AdvanceSystem()
end sub
sub AdvanceSystem()
if state = "next program"
if more items in list
start next installer
remove from list (or increment an index)
set state to "check program"
else
set state to "done"
if state = "check program"
use WMI to see if process is still running
if no
state = "next program"
if state <> "done"
setInterval(AdvanceSystem, 5000) ' call again in 5 seconds
end sub
' then somewhere in your HTA interface have a button to start things off
buttonClick = StartSystem()
使用这样的安排,您甚至可能不需要运行单独的 VBScript 来检查进程和睡眠。此外,通过这种增量过程,您可以将输出发送到某个地方的 DIV,以便用户可以看到进度,而在循环处理事物时,直到整个过程完成后才会显示输出。每次通过 AdvanceSystem 后,控制返回到 HTA 级别,系统可以自行更新。
如果您需要更具体的示例,请告诉我,我会尝试写一些东西。