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

7
我有一个用C#编写的应用程序,并希望监视它的当前状态,即是否正在运行或已关闭。到目前为止,我能够跟踪应用程序在运行时错误或任何其他应用程序退出代码下的状态。
但是当应用程序被任务管理器强制关闭时,我无法记录应用程序的状态。
有没有一种方法可以监视“结束进程”事件?还是我必须设计一个单独的服务来监视我的应用程序(我觉得这样会浪费资源)?
简要历史: 该应用程序是一个WCF订阅者应用程序,旨在作为后台进程运行并从服务器接收数据。我不想使用Windows服务,因为我正在设计一个GUI,允许客户端向服务器发送请求以获取特定数据。
此应用程序链接到另一个应用程序,该应用程序跟踪订阅者是否在线或离线。
因此,我正在寻找一种跟踪突然关闭应用程序并相应通知用户的方法。

1
我不明白你的问题。你想让你的应用程序在被强制终止时记录日志吗?这是不可能的,因为你的应用程序已经停止运行了,你只是终止了它。 - user743382
为什么不将您的GUI制作成一个WCF客户端,可以连接到本地服务,这样您就可以拥有服务路由的所有好处,同时也拥有客户端GUI。 - KingCronus
我其实对WCF还很陌生,还在学习中。让我尝试一下使用WCF客户端方法。谢谢。 - Kush
可能是处理Windows应用程序的结束进程的重复问题。 - Sakthivel
显示剩余3条评论
2个回答

8
我相信我以前在SO上看过这样的问题,所以这可能是一个重复的问题,但我找不到它,所以...
以下是一个简短的总结:
- 如果你在“进程”选项卡中选择一个进程并点击“结束进程”,则使用TerminateProcess()杀死该进程 - 你甚至无法从你的进程中拦截它,更不用说防止它了。 - 如果你在“应用程序”选项卡中选择一个“应用程序”并点击“结束任务”,那么发生的情况取决于应用程序的类型: - 控制台应用程序将被发送一个CTRL_CLOSE_EVENT事件。 - Windows/GUI应用程序将会收到一个WM_CLOSE消息。 - 你可以响应(或处理日志等)两者。
更新:刚刚找到source
更新2:找到了一个/重复的问题并投票关闭。 我现在把这个答案留在这里。

谢谢提供的信息。我得另寻他法来监控应用程序的状态。谢谢。 - Kush

-2

Process.WaitForExit() 和 Process.Exited 事件。更多信息请参见此处


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接