C#使用Process類調(diào)用外部程序分解
在程序開發(fā)中,一個程序經(jīng)常需要去調(diào)用其他的程序,C#中Process類正好提供了這樣的功能。它提供對本地和遠程進程的訪問并使您能夠啟動和停止本地系統(tǒng)進程。
一、啟動進程實例
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 屬性指定的進程資源,并將其與該組件關(guān)聯(lián)。如果啟動了進程資源,則為 true;如果沒有啟動新的進程資源(例如,如果重用了現(xiàn)有進程),則為 false。
Process.StartInfo 屬性,獲取或設(shè)置要傳遞給 Process 的 Start 方法的屬性。StartInfo 表示用于啟動進程的一組參數(shù)。 調(diào)用 Start 時,StartInfo 用于指定要啟動的進程。 唯一必須設(shè)置的 StartInfo 成員是 FileName 屬性。
ProcessStartInfo.FileName 屬性,獲取或設(shè)置要啟動的應(yīng)用程序或文檔。FileName 屬性不需要表示可執(zhí)行文件。 它可以是其擴展名已經(jīng)與系統(tǒng)上安裝的應(yīng)用程序關(guān)聯(lián)的任何文件類型。
ProcessStartInfo.CreateNoWindow屬性,獲取或設(shè)置指示是否在新窗口中啟動該進程的值。
二、關(guān)掉啟動進程
Process.Kill 方法,立即停止關(guān)聯(lián)的進程。Kill 強制終止進程,Kill 方法將異步執(zhí)行。 在調(diào)用 Kill 方法后,請調(diào)用 WaitForExit 方法等待進程退出,或者檢查 HasExited 屬性以確定進程是否已經(jīng)退出。
三、進程結(jié)束后調(diào)用其他方法
在調(diào)用某個進程結(jié)束后,我們通常需要執(zhí)行其他的方法,比如,在做安裝程序時,需要先判斷.Net Framework環(huán)境是否安裝,若未安裝,則先調(diào)用.NET Framework安裝程序后,繼續(xù)運行安裝程序方法。
通常這種情況下,有兩種方法:
方法一:WaitForExit()方法。這種方法會阻塞當(dāng)前進程,直到運行的外部程序退出。
exep.WaitForExit();//關(guān)鍵,等待外部程序退出后才能往下執(zhí)行
MessageBox.Show("Notepad.exe運行完畢");
上述代碼在Notepad.exe記事本結(jié)束之后,彈出對話框。
方法二:Exited 事件。為外部進程添加一個事件監(jiān)視器,當(dāng)退出后,獲取通知,這種方法時不會阻塞當(dāng)前進程,你可以處理其它事情。
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運行完畢");
}
在事件結(jié)束之后,調(diào)用Exited 事件方法。
對于在C#程序開發(fā)中調(diào)用外部程序的操作,要判斷這個被調(diào)用的EXE文件是否執(zhí)行結(jié)束其實最跟本的是 System.Diagnostics.Process類的應(yīng)用,其中有一個方法,就是WaitForExit();和HasExited屬性,這兩個也 都是為判斷外部程序exe文件的執(zhí)行狀態(tài)而設(shè)計的,HasExited=ture時表示執(zhí)行結(jié)束.
相關(guān)文章
C#調(diào)用外部程序的三種實現(xiàn)方式的示例
在C#中調(diào)用外部程序通常有幾種方式,本文將介紹其中的三種主要方法:System.Diagnostics.Process?類、System.Shell類以及使用C#的System.Diagnostics.ProcessStartInfo類與System.Diagnostics.Process?類結(jié)合,感興趣的可以了解一下2025-05-05Winform中GridView分組排序功能實現(xiàn)方法
這篇文章主要介紹了Winform中GridView分組排序功能實現(xiàn)方法,以實例形式詳細說明了分組排序的實現(xiàn)方法,并附帶完整的DBHelp類代碼,是非常實用的技巧,需要的朋友可以參考下2014-11-11C#調(diào)用OpenCV開發(fā)簡易版美圖工具【推薦】
本文主要介紹在WPF項目中使用OpenCVSharp3-AnyCPU開源類庫處理圖片,本文通過實例代碼給大家介紹的非常詳細,具有一定的參考借鑒價值,需要的朋友參考下吧2019-10-10C#實現(xiàn)統(tǒng)計100以內(nèi)所有素數(shù)的個數(shù)
這篇文章介紹了C#實現(xiàn)統(tǒng)計100以內(nèi)所有素數(shù)個數(shù)的方法,文中注釋非常詳細,很適合新手學(xué)習(xí)。對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧2021-11-11