.NET(C#):兩個進程防止被終止

來源:互聯網
上載者:User

我們知道,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

相關文章

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.