當前位置: 妍妍網 > 碼農

在C#程式中呼叫CMD執行命令

2024-02-12碼農

在C#中,有時候我們需要呼叫命令提示字元(CMD)來執行一些系統命令或指令碼。這可以透過使用 System.Diagnostics.Process 類來實作。 Process 類提供了建立和管理本地和遠端行程的功能。以下是一個簡單的步驟和範例,說明如何在C#程式中呼叫CMD並執行命令。

步驟

  1. 建立ProcessStartInfo物件 :這個物件包含了啟動行程所需要的所有資訊,如命令、工作目錄、參數等。

  2. 設定ProcessStartInfo的內容 :根據需要設定相關內容,如 FileName (要執行的命令或程式)、 Arguments (傳遞給命令或程式的參數)、 WorkingDirectory (命令的工作目錄)等。

  3. 建立Process物件 :使用 Process.Start 方法建立一個新的行程,並傳入 ProcessStartInfo 物件作為參數。

  4. 等待行程完成 :如果需要,可以使用 Process.WaitForExit 方法來等待行程完成。

  5. 獲取行程輸出 :如果需要獲取命令的輸出,可以讀取 Process.StandardOutput 流。

  6. 處理錯誤和異常 :確保正確處理任何可能出現的錯誤和異常。

範例

以下是一個簡單的C#範例,演示如何呼叫CMD並執行 dir 命令(列出當前目錄的檔和資料夾):

using System;
using System.Diagnostics;
classProgram
{
staticvoidMain()
{
// 建立ProcessStartInfo物件
ProcessStartInfo startInfo = new ProcessStartInfo();
// 設定FileName為cmd.exe,表示要執行的是命令提示字元
startInfo.FileName = "cmd.exe";
// 設定Arguments為要執行的命令,這裏使用/c參數來執行命令後關閉CMD視窗
startInfo.Arguments = "/c dir";
// 設定UseShellExecute為false,這樣我們就可以重新導向輸出
startInfo.UseShellExecute = false;
// 設定RedirectStandardOutput為true,這樣我們就可以讀取輸出
startInfo.RedirectStandardOutput = true;
// 建立Process物件並啟動
using (Process process = Process.Start(startInfo))
{
// 等待行程完成
process.WaitForExit();
// 讀取輸出資訊
string output = process.StandardOutput.ReadToEnd();
// 打印輸出資訊
Console.WriteLine(output);
}
}
}






在這個例子中,我們設定了 UseShellExecute false ,並啟用了 RedirectStandardOutput ,這樣我們可以讀取CMD命令的輸出。 WaitForExit 方法用於等待行程完成,然後我們透過 process.StandardOutput.ReadToEnd() 來獲取命令的輸出。

註意事項

  • 當使用 RedirectStandardOutput 時,必須同時設定 UseShellExecute false

  • 呼叫外部命令時,務必註意命令註入的風險,確保不對使用者輸入做未經驗證的處理。

  • 確保你的程式有足夠的許可權來執行所需的命令。

  • 如果需要執行復雜的指令碼或命令序列,可能需要更復雜的邏輯來管理輸入和輸出流。

  • 透過結合這些步驟和範例,你應該能夠在C#程式中成功地呼叫CMD並執行所需的命令。