次のようなコードがあります。
process.CloseMainWindow();
if (!process.WaitForExit(5000)) { process.Kill(); }
プロセスを正常に終了させるという考えですが、5 秒以上かかる場合は、強制終了する必要があると思います。
これはほとんどの場合に機能するように見えますが、プロセスが Windows エラー メッセージをスローした場合は、単にハングします。以前は「process.Kill()」しかなく、それが機能していたので、タイムアウト値を指定しているにもかかわらず、実際には WaitForExit(5000) 呼び出しでスタックしていると想定する必要があります。
これが起こる理由は何ですか?
編集:そのエラーメッセージのために、実際にハングしているのは CloseMainWindow() ではないかと思います。その場合、CloseMainWindow() メソッドを試す前にプロセスの "responding" プロパティをチェックすると、実際には "false" が返されますか? もしそうなら、私はそれを確認してから、その場合は Kill を使用できます。