Windows Server 2008 R2 および Windows Server 2012 環境に展開されているクライアント用のカスタム プロセス監視アプリケーションをリファクタリングしています。
監視アプリケーションは、クラッシュした応答のないプロセス (タスク マネージャーで「応答なし」として識別される) を特定し、それらを強制終了して再起動する必要があります。監視対象のプロセスは、コンソールまたは Win32 ベースのアプリケーションのいずれかであり、主にコンソール ベースです。
Process.Respondingプロパティは、UI が応答しているかどうかを判断するため、この特定の場合には役に立ちません (このプロパティを更新するために、以下のような「フードの下で」同様のメソッドを使用する可能性があります)。
IsHungAppWindowメソッドも、コンソールベースのアプリケーションが次の基準を満たさないため、インポートされた場合は役に立ちません。
入力を待機しておらず、起動処理中ではなく、5 秒の内部タイムアウト期間内に PeekMessage を呼び出していない場合、アプリケーションは応答していないと見なされます。
WMI システム クラスを使用してプロセスを監視していた場合、WMI クラスのStatusプロパティは役に立ちません。Win32_Process
このプロパティは実装されておらず、このクラスのどのインスタンスにも設定されません。常に NULL です。
WMI クラスのExecutionStateプロパティWin32_Process
も実装されていないように見えるため、役に立ちません。明示的には述べられていませんが、ローカル テストを実行した後、繰り返し返さNULL
れ、サード パーティがこれを示しています。
プロセスが応答していないかどうかを合理的に判断するにはどうすればよいですか?