在C#中从任务管理器中检测结束进程

时间:2012-09-07 06:49:05

标签: c# exit taskmanager

我在C#中有一个应用程序,并希望监视其当前状态,即是否正在运行或已关闭。到目前为止,我能够跟踪应用程序在运行时错误期间退出的状态,或者应用程序退出代码中的任何其他错误。

但是当任务管理器强制关闭时,我无法记录应用程序状态。

有没有办法监控End Process事件?或者我是否必须设计一个单独的服务来监视我的应用程序(我觉得这会浪费资源)?

简史: 该应用程序是一个WCF订阅者应用程序,旨在作为后台进程运行并从服务器接收数据。我不想使用Windows服务,因为我正在设计一个GUI,允许客户端向服务器发送请求以获取特定数据。

此应用程序链接到另一个应用程序,该应用程序跟踪订户是否在线或离线。

因此正在寻找一种方法来跟踪突然的应用程序关闭并相应地通知用户。

2 个答案:

答案 0 :(得分:6)

我确定我之前在SO上看过这样的问题,所以这可能是重复的,但我找不到它,所以......

这是一个简短的总结:

  • 如果您在“进程”标签中选择一个进程,然后点击“结束进程”,则使用TerminateProcess()终止该进程 - 您甚至无法从您的进程中拦截该进程,更不用说,防止它。

  • 如果您从“应用程序”标签中选择“应用程序”并单击“结束任务”,则会发生什么情况取决于应用程序的类型:

    • 控制台应用程序正在发送CTRL_CLOSE_EVENT事件。
    • Windows / GUI应用程序正在发送WM_CLOSE消息。

    您可以回复(或处理日志记录等)。

更新:再次喜欢source

更新2 :找到一个/重复并投票结束。我暂时把这个答案留在这里。

答案 1 :(得分:-1)

Process.WaitForExit()和Process.Exited事件。有关详细信息,请参阅here