您可能會發現這個問題的東西在我的答案(https://stackoverflow.com/a/3742182/128427)有用:How to get an HTA to restart itself?
它使用一個VBScript幫手等待進程結束(在HTA本身)然後重新啓動HTA。您可以修改vbscript而不是等待特定過程結束(您的一個安裝程序),然後將控制權返回給啓動下一個安裝程序並再次調用等待腳本的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級別,系統可以自行更新。
讓我知道如果你需要一個更具體的例子,我會盡量寫點東西。
即使在瀏覽器控件中,您也應該可以使用CreateObject(「WScript.Shell」)創建shell對象。從該對象中,您可以訪問Run,Exec或ShellExecute方法。就運行這些軟件包而言,您需要諮詢各個供應商。如果它們是MSI軟件包,則使用msiexec.exe和/ qn!參數。 –