对于当前程序,Process.Exited
事件并不起作用,如下代码:
static void Main()
{
var pro = Process.GetCurrentProcess();
pro.EnableRaisingEvents = true;
pro.Exited += new EventHandler(pro_Exited);
}
static void pro_Exited(object sender, EventArgs e)
{
throw new NotImplementedException();
}
结果不会有任何异常抛出。
解决方案是使用AppDomain.ProcessExit
,当默认应用程序域由于进程退出而卸载时,该事件会被调用:
static void Main()
{
AppDomain.CurrentDomain.ProcessExit += new EventHandler(CurrentDomain_ProcessExit);
}
static void CurrentDomain_ProcessExit(object sender, EventArgs e)
{
throw new NotImplementedException();
}
运行代码,异常会顺利抛出。
但是如果进程遭到强制退出,上面的事件都不会被运行的。
如果用一个程序监控另一个程序的Process.Exited
事件,即使另一个进程被强制结束,Process.Exited
仍然会运行的。
代码:
static void Main()
{
//打开记事本
var pro = new Process();
pro.StartInfo.FileName = "notepad";
pro.EnableRaisingEvents = true;
pro.Exited += new EventHandler(pro_Exited);
pro.Start();
pro.WaitForExit();
}
static void pro_Exited(object sender, EventArgs e)
{
Console.WriteLine("另一个进程已被结束");
}