C# 使用 Process 執行外部程式/指令

我們可以使用 ProcessStartInfo 來設定要執行的外部程式資訊,再使用 Process 來啟動、執行。

例如下面以使用 powershell 執行(可以自行替換為其他執行檔),執行參數為 ls (可以自行替換為其他參數)
            
        var startInfo = new ProcessStartInfo
        {
            FileName = @"C:\Windows\System32\WindowsPowerShell\v1.0\powershell.exe",
            Arguments = $"ls",
            RedirectStandardOutput = true,
            RedirectStandardError = true,
            UseShellExecute = false,
            CreateNoWindow = true,
        };

        try
        {
            using var process = new Process { StartInfo = startInfo };
            process.Start();

            string output = process.StandardOutput.ReadToEnd();
            string error = process.StandardError.ReadToEnd();

            Console.WriteLine($"Output: {output}");
            Console.WriteLine($"Error: {error}");

            process.WaitForExit();

            if (process.ExitCode != 0)
            {
                Console.WriteLine("Error: " + error);
            }
        }
        catch (Exception ex)
        {
            Console.WriteLine("Exception: " + ex.Message);
        }
    

在部分系統中執行結果會出現亂碼,可能是因為系統編碼問題,可以透過手動指定 StandardOutputEncoding 和 StandardErrorEncoding 的方式變更輸出的編碼格式,只是在 .NET Core 中需要額外安裝套件, 延伸閱讀: C# .NET Core 以 Big 5 (大五碼)編碼格式讀取檔案
    
        var startInfo = new ProcessStartInfo
        {
            FileName = @"C:\Windows\System32\WindowsPowerShell\v1.0\powershell.exe",
            Arguments = $"ls",
            RedirectStandardOutput = true,
            RedirectStandardError = true,
            UseShellExecute = false,
            CreateNoWindow = true,
            StandardOutputEncoding = Encoding.GetEncoding("Big5"),
            StandardErrorEncoding = Encoding.GetEncoding("Big5"),
        };
    



參考資料:
Microsoft.Learn - Process Class
Microsoft.Learn - ProcessStartInfo Class

留言

張貼留言

如果有任何問題、建議、想說的話或文章題目推薦,都歡迎留言或來信: a@ruyut.com