この質問に対する私の回答 ( https://stackoverflow.com/a/3742182/128427 )で役立つ情報が見つかるかもしれません: HTA を再起動するにはどうすればよいですか?
VBScript ヘルパーを使用して、プロセス (HTA 自体) が終了するのを待ってから、HTA を再起動します。代わりに vbscript を変更して、特定のプロセス (インストーラーの 1 つ) が終了するのを待機し、制御を HTA に戻して、次のインストーラーを開始し、待機スクリプトを再度呼び出すことができます。
HTA が WScript.Sleep ルーチンを呼び出すことはできないと思いますが、HTA には、X 秒後にルーチンを呼び出す、またはキャンセルされるまで X 秒ごとに繰り返しルーチンを呼び出す setTimeout メソッドと setInterval メソッドがあります。これらを使用して、プロセスがまだ実行されているかどうかを定期的に確認できます (他の回答で示したように、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 レベルに戻り、システムはそれ自体を更新できます。
より具体的な例が必要な場合はお知らせください。何かを書き込もうとします。