我們知道,AppDomain.ProcessExit能監視當前進程的退出,而Process.Exited事件只能監視其他進程的退出。而且如果進程被強制結束AppDomain.ProcessExit不會發生的。綜上事實,我們可以用兩個進程互相監視另一個進程的Process.Exited事件來,然後如果一個進程被結束,另一個進程會重新開啟這個程式。
比如樣本中兩個程式,mgen_p1,和mgen_p2。一個程式結束後,另一個程式會馬上重新運行被結束的程式。當然如果兩個程式同時被結束,那麼他們會被徹底結束。
兩個程式的代碼是類似的,比如其中mgen_p1的代碼:
//+ using System.Diagnostics
static void Main(string[] args)
{
Console.WriteLine("mgen_p1正在運行");
var pros = Process.GetProcessesByName("mgen_p2");
Process mgen_p2;
//判斷另一個程式是否在運行
if (pros.Length == 0)
run_mgen_p2();
else
{
//設定進程的Exited退出事件
mgen_p2 = pros[0];
mgen_p2.EnableRaisingEvents = true;
mgen_p2.Exited += new EventHandler(process_Exited);
}
System.Threading.Thread.Sleep(-1);
}
//重新啟動另一個程式
static void run_mgen_p2()
{
var process = new Process();
process.StartInfo.FileName = "mgen_p2";
process.EnableRaisingEvents = true;
process.Exited += new EventHandler(process_Exited);
process.Start();
}
//進程退出事件
static void process_Exited(object sender, EventArgs e)
{
run_mgen_p2();
}
可以下載原始碼或者樣本程式
點擊下載
(此為微軟SkyDrive存檔,請用瀏覽器直接下載,用某些下載工具可能無法下載)
環境:Visual C# 2010 Express