C#程序啓動和關閉外部程序

參考:
【1】C#啓動外部程序的幾種常用方法彙總
【2】C# 調用exe程序總結
【3】MSDN文檔:Process 類
【4】C# 進程Process基本的操作說明
【5】C#操作進程(Process)

1 方法

主要使用Process類。位於System.Diagnostics命名空間
有兩類方法
(1)一種是定義一個Process實例,對這個實例的屬性進行配置,然後啓動它。類似與【2】中那樣。如下:

System.Diagnostics.Process p = new System.Diagnostics.Process();
 p.StartInfo.FileName = AppConst.EngineFilePath;   //exe程序文件地址
 p.StartInfo.UseShellExecute = false;
 p.StartInfo.RedirectStandardInput = false;
 p.StartInfo.RedirectStandardOutput = false;
 p.StartInfo.RedirectStandardError = false;
 p.StartInfo.CreateNoWindow = true;					//不彈出窗口,改爲後臺運行
 p.StartInfo.Arguments = sb.ToString();  //參數 多個參數使用空格分開               
 p.Start();
 p.WaitForExit();
 p.Close();

(2)另一種是利用Process的系統直接啓動一個,可能就沒法設置好多的東西了,類似於【1】中那樣。

private string appName = "calc.exe";
private void button1_Click(object sender, EventArgs e)
{
Process.Start(appName);
MessageBox.Show(String.Format("外部程序 {0} 啓動完成!", this.appName), this.Text,
MessageBoxButtons.OK, MessageBoxIcon.Information);
}

2 啓動等待等

參見【1】中,可以等待等。

3 其他注意

(1)新進程的工作目錄
不設置時爲調用者的工作目錄,如果不同,通過WorkingDirectory設置。如下:

System.Diagnostics.Process p = new System.Diagnostics.Process();
p.StartInfo.WorkingDirectory = "X:\\spinning";

(2)進程的退出
有2種方法:kill和CloseMainWindow。
後者適用於有窗口的。能釋放乾淨相關資源。
而前者適用於所有。強制的殺死,可能帶來資源釋放不乾淨等問題。

Process proc = Process.Start(appName);
....
proc.Kill();

我遇到的一個問題:
我使用上述方法,啓動一個程序的時候,他同時啓動了兩個同樣名稱的進程。
上面的代碼只能殺死一個,爲此,改進了一種方法,按照名稱殺死進程,將兩個全部幹掉。前提是這兩個進程同名。

string processName = "XX"//名稱一般爲程序的名字,不帶後綴名exe。的可通過 p.ProcessName查看
System.Diagnostics.Process[] ps = System.Diagnostics.Process.GetProcessesByName(processName);
foreach (System.Diagnostics.Process p in ps)
{
    if(!p.HasExited)	//當沒有退出時,殺死他
        p.Kill();
}
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章