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

ASP.NET (C#) 呼叫命令列工具完整實作:以 Ping 為例

     編輯:ASP.NET 基礎

前言

System.Diagnostics.Process 類別提供在 .NET 應用程式中啟動、控制外部處理程序的能力。本文示範如何在 ASP.NET 中呼叫 cmd.exe 執行 ping 指令並擷取輸出結果。

核心命名空間

using System.Diagnostics;

基本流程

  1. 建立 Process 實例。
  2. 設定 StartInfo 屬性:檔名、參數、重導向標準輸入/輸出/錯誤、不建立視窗。
  3. 啟動處理程序。
  4. 向標準輸入寫入指令(如 ping www.baidu.com)。
  5. 關閉標準輸入,讀取標準輸出。

完整程式碼範例

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分別重導向標準輸入、輸出、錯誤串流
CreateNoWindowtrue 避免閃爍視窗,伺服器端必備
StandardInput.WriteLine傳送指令給 cmd.exe
StandardOutput.ReadToEnd一次讀取完整輸出文字

進階應用

  • 非同步讀取:使用 BeginOutputReadLine 避免大量輸出導致死結。
  • 逾時處理:搭配 WaitForExit(milliseconds) 防止指令卡住。
  • 編碼設定:若輸出含中文,需指定 StandardOutput.CurrentEncoding 或讀取位元組後自行解碼。
  • 安全性:嚴格驗證使用者輸入,防止命令注入攻擊。

常見問題排查

  • 權限不足:ASP.NET 執行身分需具備執行 cmd.exe 與目標指令的權限。
  • 路徑問題:指令若不在系統 PATH 中,需給完整路徑。
  • 輸出截斷:緩衝區滿導致阻塞,請改用非同步事件式讀取。

總結

透過 Process 類別,ASP.NET 可靈活整合命令列工具,擴充系統功能。實務上務必注意權限、編碼、非同步與安全性,確保生產環境穩定運行。

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