C# Process方法呼叫cmd執行命令
阿新 • • 發佈:2019-01-31
C#通過程式來呼叫cmd命令的操作可以應用與許多地方,例如:可以通過Process呼叫cmd命令的方法,獲取NXN alienbrain Manager Client(AB資源管理)中的資源資訊,完成與其他指定資源的對比檢查;
1:基本使用方法:
使用前需加上: using System.Diagnostics;
同步重定向程式碼如下:
第一步:確定必要成分
1 Process process = new Process(); 2 process.StartInfo.UseShellExecute = false; // 是否使用外殼程式 3 process.StartInfo.CreateNoWindow = true; //是否在新視窗中啟動該程序的值 4 process.StartInfo.RedirectStandardInput = true; // 重定向輸入流 5 process.StartInfo.RedirectStandardOutput= true; //重定向輸出流 6 process.StartInfo.RedirectStandardError= true; //重定向錯誤流
需要注意的是:若要使用 StandardOutput,必須將 :
ProcessStartInfo.UseShellExecute = false;
ProcessStartInfo.RedirectStandardOutput = true;
否則,讀取StandardOutput 流時將引發異常;
接下來出入執行檔案的路徑:
1 process.StartInfo.FileName = "";//待輸入的執行檔案路徑
第二步:執行新程序1 process.Start(); 2 process.StandardInput.WriteLine(textBox1.Text); //從textBox1中輸入資訊到輸入流 3 string output = process.StandardOutput.ReadToEnd();//獲取exe處理之後的輸出資訊到output 4 string error = process.StandardError.ReadToEnd(); //獲取錯誤資訊到error 5 process.Close(); //close程序
這樣就可以將原本exe輸出到黑框重定向到該程式的output中;
將錯誤輸出重定向到error中,用於之後的操作;
值得注意的是:所執行檔案的當前目錄在 專案\bin\Debug下
2:程式碼示例:
using System; using System.Collections.Generic; using System.Linq; using System.Text; using System.Diagnostics; using System.ComponentModel; using System.IO; namespace Demo { class MyProcess { // 當找不到檔案或者拒絕訪問時出現的Win32錯誤碼 const int ERROR_FILE_NOT_FOUND = 2; const int ERROR_ACCESS_DENIED = 5; // 通過命令列獲取help顯示資訊 void PrintDoc() { Process process = new Process(); try { process.StartInfo.UseShellExecute = false; //是否使用作業系統shell啟動 process.StartInfo.CreateNoWindow = true; //是否在新視窗中啟動該程序的值 (不顯示程式視窗) process.StartInfo.RedirectStandardInput = true; // 接受來自呼叫程式的輸入資訊 process.StartInfo.RedirectStandardOutput = true; // 由呼叫程式獲取輸出資訊 process.StartInfo.RedirectStandardError = true; //重定向標準錯誤輸出 process.StartInfo.FileName = "cmd.exe"; process.Start(); // 啟動程式 process.StandardInput.WriteLine("help"); //向cmd視窗傳送輸入資訊 process.StandardInput.AutoFlush = true; // 前面一個命令不管是否執行成功都執行後面(exit)命令,如果不執行exit命令,後面呼叫ReadToEnd()方法會假死 process.StandardInput.WriteLine("exit"); StreamReader reader = process.StandardOutput;//獲取exe處理之後的輸出資訊 string curLine = reader.ReadLine(); //獲取錯誤資訊到error while (!reader.EndOfStream) { if (!string.IsNullOrEmpty(curLine)) { Console.WriteLine(curLine); } curLine = reader.ReadLine(); } reader.Close(); //close程序 process.WaitForExit(); //等待程式執行完退出程序 process.Close(); } catch (Win32Exception e) { if (e.NativeErrorCode == ERROR_FILE_NOT_FOUND) { Console.WriteLine(e.Message + ". 檢查檔案路徑."); } else if (e.NativeErrorCode == ERROR_ACCESS_DENIED) { Console.WriteLine(e.Message + ". 你沒有許可權操作檔案."); } } } public static void Main() { MyProcess myProcess = new MyProcess(); myProcess.PrintDoc(); Console.ReadKey(); } } }
執行結果如下:
此次執行結果與在控制檯Dos視窗輸入“help”命令的執行結果一樣;