1. 程式人生 > >C# Process方法呼叫cmd執行命令

C# Process方法呼叫cmd執行命令

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”命令的執行結果一樣;