7

我有一个 C# 应用程序,并想监视它的当前状态,即它是运行还是关闭。到目前为止,如果应用程序在运行时错误或任何其他应用程序退出代码中退出,我能够跟踪状态。

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

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

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

此应用程序链接到另一个应用程序,该应用程序跟踪订阅者,订阅者是在线还是离线。

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

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 回答