首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
您现在的位置: 程式碼之家 >> 編程語言 >  >> .NET 網頁程式設計 >> C# >> 關於C#

C# 使用 Process 類別啟動本機與遠端程序完整指南

     編輯:關於C#

基本啟動範例

using System.Diagnostics;

Process ie = new Process();
ie.StartInfo.FileName = "iexplore.exe";
ie.StartInfo.Arguments = "https://www.example.com";
ie.Start();

核心屬性與方法總覽

成員用途
StartInfo.FileName可執行檔路徑或註冊關聯的檔案/URL
StartInfo.Arguments命令列參數
StartInfo.WorkingDirectory工作目錄
StartInfo.Verb動作:runas (管理員)、print、edit 等
StartInfo.WindowStyleHidden、Minimized、Maximized、Normal
StartInfo.UseShellExecutetrue (預設) 使用 Shell 執行,支援 Verb/URL;false 直接建立進程,支援重導向 I/O
StartInfo.RedirectStandardOutput搭配 UseShellExecute=false 捕獲標準輸出
Start()啟動進程,回傳 bool 表示成功與否
WaitForExit()阻塞等待進程結束
ExitCode進程結束代碼

進階場景範例

1. 以管理員權限啟動 (UAC 提權)

var psi = new ProcessStartInfo
{
    FileName = "cmd.exe",
    Arguments = "/c net stop wuauserv",
    Verb = "runas",           // 觸發 UAC
    UseShellExecute = true    // Verb 需要 ShellExecute
};
Process.Start(psi);

2. 捕獲主控台程式輸出

var psi = new ProcessStartInfo
{
    FileName = "git.exe",
    Arguments = "status",
    UseShellExecute = false,
    RedirectStandardOutput = true,
    RedirectStandardError = true,
    CreateNoWindow = true
};
using var proc = Process.Start(psi);
string output = proc.StandardOutput.ReadToEnd();
string error = proc.StandardError.ReadToEnd();
proc.WaitForExit();
Console.WriteLine($"ExitCode: {proc.ExitCode}\n{output}");

3. 開啟檔案/網址 (關聯預設程式)

Process.Start(new ProcessStartInfo("https://docs.microsoft.com") { UseShellExecute = true });
Process.Start(new ProcessStartInfo(@"C:\Report.pdf") { UseShellExecute = true });

遠端啟動進程

Process 類別僅限本機。遠端啟動需透過:

  • WMI:ManagementClass("Win32_Process").InvokeMethod("Create", ...) (需 RPC/DCOM 權限)
  • PowerShell Remoting:Invoke-Command -ComputerName Server01 -ScriptBlock { Start-Process ... }
  • SSH / WinRM / 代理服務:自建 API 端點接收指令並在目標機執行

常見坑點與最佳實務

  • 路徑含空白:FileName 請用完整路徑,參數含空白請用雙引號包裹。
  • 非同步等待:UI 應用請用 proc.WaitForExitAsync() (.NET 6+) 避免凍結介面。
  • 資源釋放:Process 實作 IDisposable,務必 using 或呼叫 Dispose()。
  • 死結風險:同步讀取 StandardOutput 時若緩衝區滿會阻塞,請改用非同步事件 OutputDataReceived 或同時讀取 Output/Error。

總結

System.Diagnostics.Process 是 .NET 啟動與管理外部程序的核心 API,掌握 ProcessStartInfo 設定與 UseShellExecute 雙模式差異,即可涵蓋從簡單開啟網頁到複雜管線導向、提權執行、遠端協調等多數場景。

  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved