【问题标题】:How to detect killing of an application?如何检测应用程序被杀死?
【发布时间】:2020-04-30 21:45:44
【问题描述】:

想象一下,我们有两个 .net 应用程序。应用程序“A”使用System.Diagnostics.Process 类启动应用程序“B”。然后“A”想通过方法Process.Kill杀死“B”。 “B”如何确定有人在杀他?

【问题讨论】:

标签: .net kill system.diagnostics


【解决方案1】:

我认为应用程序不可能响应被杀死...我认为它更多地在操作系统级别运行,就像使用任务管理器时一样。

在这种情况下使用 Process.Kill() 可能不正确,您能否提供有关您要解决的问题的更多信息?

【讨论】:

【解决方案2】:

也许您可以在流程 B 的代码中尝试这种方式...

// 我们在进程 B.... System.Diagnostics.Process proc = System.Diagnostics.Process.GetCurrentProcess(); proc.EnableRaisingEvents = true; proc.Exited += new EventHandler(proc_Exited); 静态无效 proc_Exited(对象发送者,EventArgs e) { // 在这里处理我们被杀... }

我不能自信地说这会奏效...向进程发送“Kill”的操作系统的本质是依赖于实现的,因此,进程 B 无法保证万无一失的方式知道这一点它正在被杀死。正如您没有明确说明进程 B 是否是托管/非托管进程,我将假设它确实是托管的,因为标签是“.net”,如果它是 WinForm 应用程序,可能是 Closing 事件在 winForms 中将在该事件处理程序的参数中有一个原因或使用如下所示的 ApplicationDomain 实例:

AppDomain thisDom = AppDomain.CurrentDomain; thisDom.ProcessExit += new EventHandler(thisDom_ProcessExit); // 静态无效 thisDom_ProcessExit(对象发送者,EventArgs e) { // 在这里处理 AppDomain 将被卸载和杀死的情况! }

希望这会有所帮助, 此致, 汤姆。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-10-23
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多