■WScript.ShellのExecメソッド標準出力バッファ4KBの罠
もしフリーズが発生するVBScript処理内に
Set WSHShell = CreateObject("WScript.Shell")
Set oExec = WSHShell.Exec("cscript scriptworker.vbs")
こんな感じで、Execメソッドを使っていれば、まず間違いなく標準出力(あるいはエラー出力)のバッファあふれによるフリーズの可能性大です。
Execメソッドでの標準出力及びエラー出力のバッファサイズが4KBのため、大量に処理結果が出力されるとバッファが一杯になり処理がブロックされてしまいます。
■解決策
マイクロソフトのサイトにあるとおり、
Hang When Reading StdErr/StdOut Properties of WshScriptExec Object
StdOut及びStdErrプロパティから標準出力結果を適宜読み出してあげればOKです。
■デッドロックが発生する可能性もあり
以下のブログ
へたれたプログラマの憂鬱 WSHのExecメソッド
によると、StdOut及びStdErrプロパティから標準出力結果を適宜読み出すだけでは、場合によってはデッドロックを引き起こす可能性もあるとのこと。
現場ではそのようなケースに遭遇したことはないですが、運悪くそのケースにハマった場合は標準出力をリダイレクトしてファイルに吐き出す等の対応が必要になります。