7

C# でアプリケーションを作成しており、その現在のステータス (実行中か終了か) を監視したいと考えています。これまでのところ、実行時エラー中にアプリケーションが終了した場合、またはアプリケーションの終了コードでその他のエラーが発生した場合、ステータスを追跡できます。

しかし、タスクマネージャーによって強制的に閉じられたときに、アプリケーションのステータスをログに記録できません。

End Process イベントを監視する方法はありますか? または、アプリケーションを監視するために別のサービスを設計する必要がありますか (リソースの無駄になると思います)。

簡単な歴史: このアプリケーションは、バックグラウンド プロセスとして実行され、サーバーからデータを受信することを目的とした WCF サブスクライバー アプリケーションです。クライアントが特定のデータの要求をサーバーに送信できるようにする GUI を設計しているため、Windows サービスを使用したくありません。

このアプリケーションは、加入者がオンラインであるかオフラインであるかにかかわらず、加入者を追跡する別のアプリケーションにリンクされています。

したがって、突然のアプリケーションの終了を追跡し、それに応じてユーザーに通知する方法を探していました。

4

2 に答える 2

7

以前にSOでこのような質問を見たことがあると思いますので、これはおそらく重複していますが、見つからないので...

ここに短いまとめがあります:

  • [プロセス]タブでプロセスを選択し、[プロセスの終了]をクリックすると、プロセスが強制終了さTerminateProcess()れます。プロセスからプロセスを傍受することはできません。ましてや、それを防ぐことはできません。

  • 「アプリケーション」タグから「アプリケーション」を選択して「タスクの終了」をクリックすると、アプリケーションの種類によって何が起こるかによって異なります。

    • コンソールアプリケーションはCTRL_CLOSE_EVENTイベントを送信しています。
    • Windows/GUIアプリケーションはWM_CLOSEメッセージを送信しています。

    両方に応答する(またはロギングなどで処理する)ことができます。

更新:ソースをもう一度気に入ってください。

アップデート2:重複が見つかり、投票を終了します。私は今のところこの答えをここに残します。

于 2012-09-07T06:55:29.697 に答える
-2

Process.WaitForExit() および Process.Exited イベント。詳しくはこちらをご覧ください

于 2012-09-07T06:58:15.203 に答える