我們知道,AppDomain.ProcessExit能監視當前進程的退出,而Process.Exited事件只能監視其他進程的退出。而且如果進程被強制結束AppDomain.ProcessExit不會發生的。綜上事實,我們可以用兩個進程互相監視另一個進程的Process.Exited事件來,然後如果一個進程被結束,另一個進程會重新打開這個程序。
比如示例中兩個程序,mgen_p1,和mgen_p2。一個程序結束後,另一個程序會馬上重新運行被結束的程序。當然如果兩個程序同時被結束,那麼他們會被徹底結束。
兩個程序的代碼是類似的,比如其中mgen_p1的代碼:
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
沒有留言:
張貼留言