在程序開發中,一個程序經常需要去調用其他的程序,C#中Process類正好提供了這樣的功能。它提供對本地和遠程進程的訪問並使您能夠啟動和停止本地系統進程。
一、啟動進程實例
- Process myProcess = new Process();
- try
- {
- myProcess.StartInfo.UseShellExecute = false;
- myProcess.StartInfo.FileName = "test.exe";
- myProcess.StartInfo.CreateNoWindow = true;
- myProcess.Start();
- }
- catch (Exception e)
- {
- Console.WriteLine(e.Message);
- }
Process.Start 方法,啟動(或重用)此 Process 組件的 StartInfo 屬性指定的進程資源,並將其與該組件關聯。如果啟動了進程資源,則為 true;如果沒有啟動新的進程資源(例如,如果重用了現有進程),則為 false。
Process.StartInfo 屬性,獲取或設置要傳遞給 Process 的 Start 方法的屬性。StartInfo 表示用於啟動進程的一組參數。 調用 Start 時,StartInfo 用於指定要啟動的進程。 唯一必須設置的 StartInfo 成員是 FileName 屬性。
ProcessStartInfo.FileName 屬性,獲取或設置要啟動的應用程序或文檔。FileName 屬性不需要表示可執行文件。 它可以是其擴展名已經與系統上安裝的應用程序關聯的任何文件類型。
ProcessStartInfo.CreateNoWindow屬性,獲取或設置指示是否在新窗口中啟動該進程的值。
二、關掉啟動進程
Process.Kill 方法,立即停止關聯的進程。Kill 強制終止進程,Kill 方法將異步執行。 在調用 Kill 方法后,請調用 WaitForExit 方法等待進程退出,或者檢查 HasExited 屬性以確定進程是否已經退出。
三、進程結束后調用其他方法
在調用某個進程結束后,我們通常需要執行其他的方法,比如,在做安裝程序時,需要先判斷.Net Framework環境是否安裝,若未安裝,則先調用.NET Framework安裝程序后,繼續運行安裝程序方法。
通常這種情況下,有兩種方法:
- System.Diagnostics.Process exep = System.Diagnostics.Process.Start(@"C:\Windows\Notepad.exe");
- exep.WaitForExit();//關鍵,等待外部程序退出后才能往下執行
- MessageBox.Show("Notepad.exe運行完畢");
上述代碼在Notepad.exe記事本結束之后,彈出對話框。
- System.Diagnostics.Process exep = new System.Diagnostics.Process();
- exep.StartInfo.FileName = @"C:\Windows\Notepad.exe";
- exep.EnableRaisingEvents = true;
- exep.Exited += new EventHandler(exep_Exited);
- exep.Start();
- void exep_Exited(object sender, EventArgs e)
- {
- MessageBox.Show("Notepad.exe運行完畢");
- }
在事件結束之后,調用Exited 事件方法。
對於在C#程序開發中調用外部程序的操作,要判斷這個被調用的EXE文件是否執行結束其實最跟本的是 System.Diagnostics.Process類的應用,其中有一個方法,就是WaitForExit();和HasExited屬性,這兩個也 都是為判斷外部程序exe文件的執行狀態而設計的,HasExited=ture時表示執行結束.