System.Diagnostics.Process 類別提供在 .NET 應用程式中啟動、控制外部處理程序的能力。本文示範如何在 ASP.NET 中呼叫 cmd.exe 執行 ping 指令並擷取輸出結果。
using System.Diagnostics;
Process 實例。StartInfo 屬性:檔名、參數、重導向標準輸入/輸出/錯誤、不建立視窗。ping www.baidu.com)。string hostname = "www.baidu.com"; // 或 IP 位址
Process prc = new Process();
prc.StartInfo.FileName = "cmd.exe";
prc.StartInfo.UseShellExecute = false; // 必須為 false 才能重導向
prc.StartInfo.RedirectStandardInput = true;
prc.StartInfo.RedirectStandardOutput = true;
prc.StartInfo.RedirectStandardError = true;
prc.StartInfo.CreateNoWindow = true; // 不顯示黑色視窗
prc.Start();
prc.StandardInput.WriteLine("ping " + hostname);
prc.StandardInput.Close(); // 關閉輸入,讓 cmd 結束
string output = prc.StandardOutput.ReadToEnd();
// 在 ASP.NET 中可直接 Response.Write(output);
prc.WaitForExit(); // 確保處理程序結束
| 屬性 | 用途 |
|---|---|
UseShellExecute | 設為 false 才能使用重導向功能 |
RedirectStandardInput/Output/Error | 分別重導向標準輸入、輸出、錯誤串流 |
CreateNoWindow | true 避免閃爍視窗,伺服器端必備 |
StandardInput.WriteLine | 傳送指令給 cmd.exe |
StandardOutput.ReadToEnd | 一次讀取完整輸出文字 |
BeginOutputReadLine 避免大量輸出導致死結。WaitForExit(milliseconds) 防止指令卡住。StandardOutput.CurrentEncoding 或讀取位元組後自行解碼。cmd.exe 與目標指令的權限。透過 Process 類別,ASP.NET 可靈活整合命令列工具,擴充系統功能。實務上務必注意權限、編碼、非同步與安全性,確保生產環境穩定運行。