我們可以使用 ProcessStartInfo 來設定要執行的外部程式資訊,再使用 Process 來啟動、執行。
例如下面以使用 powershell 執行(可以自行替換為其他執行檔),執行參數為 ls (可以自行替換為其他參數)
在部分系統中執行結果會出現亂碼,可能是因為系統編碼問題,可以透過手動指定 StandardOutputEncoding 和 StandardErrorEncoding 的方式變更輸出的編碼格式,只是在 .NET Core 中需要額外安裝套件, 延伸閱讀: C# .NET Core 以 Big 5 (大五碼)編碼格式讀取檔案
參考資料:
Microsoft.Learn - Process Class
Microsoft.Learn - ProcessStartInfo Class
例如下面以使用 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
感謝教學~
回覆刪除