透過Console執行Exe檔案,並動態取回回傳值

這篇文章很短,只是要說明當我們利用System.Diagnostics.Process去執行一隻外部的執行檔案(多數時候為exe)時,如何不透過導向符號「>」輸出成檔案後取回回傳結果,而是透過直接將列印在Console中的文字完整的讀取回到我們的程式碼裡面,進行後續再處理的工作。

這邊用cmd下面的「SystemInfo.exe」取得當前系統資訊為例子,進行程式碼的示範,其實關鍵就在於利用Process實例去讀取「StandardOutput.ReadToEnd()」而已,比起某些網路文章緣木求魚般的去取出字串(回傳值),來的非常的簡單易懂。

static void Main(string[] args)
{
  using (System.Diagnostics.Process oProcess = new System.Diagnostics.Process())
  {
    oProcess.StartInfo = new System.Diagnostics.ProcessStartInfo()
    {
      FileName = @"C:\Windows\System32\SystemInfo.exe",
      UseShellExecute = false,
      RedirectStandardOutput = true,
      CreateNoWindow = true
    };
    //啟動程序
    oProcess.Start();
    //取得輸出字串
    string cTemp = oProcess.StandardOutput.ReadToEnd();
    //等候程序結束
    oProcess.WaitForExit();
    //列印字串
    Console.WriteLine(cTemp);
  }
  Read();
}

※註:這篇文章不討論非同步(Async)取值或System.ComponentModel.Win32Exception等問題,有需要這方面的程式碼請自行撰寫。

相關參考

System.Diagnostics.Process System.Diagnostics.ProcessStartInfo Execute Exe Output NoFile DirectGetString DirectGetValue