【问题标题】:Detect End Process From Task Manager In C#在 C# 中从任务管理器检测结束进程
【发布时间】:2012-09-07 06:49:05
【问题描述】:

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

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

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

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

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

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

【问题讨论】:

  • 我不明白你的问题。您希望您的应用程序在被强制终止时记录下来?你不能这样做,你的应用程序不再运行,你只是终止了它。
  • 抱歉这个模糊的问题......让我在这个问题中添加一个简短的历史,确切地说我想要做什么
  • 为什么不把你的 GUI 做成一个可以连接到本地服务的 WCF 客户端,这样你就可以拥有服务路由的所有好处,同时也有一个客户端 GUI。
  • 我实际上是 WCF 的新手,所以还在学习。让我尝试使用 WCF 客户端方法。谢谢

标签: c# exit taskmanager


【解决方案1】:

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

这是一个简短的总结:

  • 如果您在“进程”选项卡中选择一个进程并单击“结束进程”,则该进程将被使用 TerminateProcess() 杀死 - 您甚至无法从您的进程中拦截它,更不用说阻止它了.

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

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

    您可以同时响应(或处理日志记录等)。

更新:再次喜欢source

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

【讨论】:

  • 感谢您的信息。生病必须寻找另一种方法来监控应用程序的状态..Thankx
【解决方案2】:

Process.WaitForExit() 和 Process.Exited 事件。请参阅here 了解更多信息

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2016-06-27
    • 2010-11-25
    • 2016-09-20
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多