如何确定查杀应用程序

时间:2010-02-18 14:11:05

标签: .net kill system.diagnostics

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

2 个答案:

答案 0 :(得分:0)

我认为应用程序无法响应被杀...我认为它在操作系统级别运行时更像是在使用任务管理器时。

在此上下文中使用Process.Kill()可能不正确,您是否可以提供有关您尝试解决的问题的更多信息?

答案 1 :(得分:0)

也许你可以在Process B的代码中以这种方式尝试......

// We're in Process B....
System.Diagnostics.Process proc = System.Diagnostics.Process.GetCurrentProcess();
proc.EnableRaisingEvents = true;
proc.Exited += new EventHandler(proc_Exited);

static void proc_Exited(object sender, EventArgs e)
{
   // Handle here that we got killed...
}

我无法自信地说这会起作用......向流程发送“杀戮”的操作系统的本质是依赖于实现的,因此,流程B无法保证万无一失的方式知道它被杀了。由于你没有明确说明进程B是一个托管/非托管进程,我将假设它确实被管理,因为标签是'.net',如果它是一个WinForm应用程序,也许是{{1} winForms中的事件将在该事件处理程序的参数中有一个原因或使用ApplicationDomain实例,如下所示:

AppDomain thisDom = AppDomain.CurrentDomain;
thisDom.ProcessExit += new EventHandler(thisDom_ProcessExit);
//

static void thisDom_ProcessExit(object sender, EventArgs e)
{
   // Handle the situation here where the AppDomain is going to be unloaded and killed!
}

希望这有帮助, 最好的祝福, 汤姆。