.NET 提供 `System.Diagnostics.Process` 類別啟動外部程式:
using System.Diagnostics;
// 啟動命令提示字元
Process.Start("cmd.exe");
// 啟動指定路徑執行檔
Process.Start(@"C:\Path\To\Application.exe");
透過 `ProcessStartInfo` 可精確控制啟動參數、工作目錄、視窗樣式等:
System.Diagnostics.Process p = new System.Diagnostics.Process();
p.StartInfo.FileName = "arj.exe"; // 程式名稱
p.StartInfo.Arguments = "-x sourceFile.Arj c:\\temp"; // 啟動參數
p.Start(); // 啟動
// 判斷是否執行結束
if (p.HasExited) // 注意:原文 HasExisted 為拼寫錯誤
p.Kill();
封裝可重用的靜態方法,支援完整啟動參數:
/// 啟動外部應用程式
public static bool StartProcess(string file, string workDirectory, string args, ProcessWindowStyle style)
{
try
{
Process myProcess = new Process();
ProcessStartInfo startInfo = new ProcessStartInfo(file, args);
startInfo.WindowStyle = style;
startInfo.WorkingDirectory = workDirectory;
myProcess.StartInfo = startInfo;
myProcess.StartInfo.UseShellExecute = false; // 重要:重導向輸出時必須設為 false
myProcess.Start();
return true;
}
catch (Exception e0)
{
MessageBox.Show("啟動應用程式時出錯!原因:" + e0.Message);
return false;
}
}
// 實際呼叫範例
string parms = GlobalObject.GetInstance().UserID + " " + GlobalObject.GetInstance().UserPassWord;
if (PublicMethods.StartProcess(
Application.StartupPath + @"\UpTool\uptool.exe",
Application.StartupPath + @"\UpTool",
parms,
ProcessWindowStyle.Normal))
{
Environment.Exit(0); // 啟動更新程式後結束自身
}