有時候我們必須在 .NET 的程式中執行外部的 EXE 可執行檔,方便我們調用一些別人已經寫好的功能,這聽起來相當實用,一起來看看吧。
在 .NET 程式環境中要做到這件事情,其實很簡單,過程中你只需要用到 System.Diagnostics 底下的 Process 類別,然後給他一些啟動資訊就可以了。
ProcessStartInfo 啟動資訊的詳細內容,直接參考官方文件,就有很清楚的說明,下面的範例設定,我想應該適用於大部分的使用情境:
1 | var process = new Process |
上面範例的最後兩個設定 RedirectStandardOutput 和 RedirectStandardError 可以特別注意一下,這關係於是否將該執行檔的輸出,輸出到當前執行視窗的資料流中。但只是這樣設定,你還是看不到輸出資訊的,你必須再使用 process.StandardOutput.ReadToEnd() 和 process.StandardError.ReadToEnd() 來取得相關輸出。
不過我這邊建議使用非同步的事件處理方式來操作,會比較符合資料流的特性,方法如下:
1 | //* Set your output and error (asynchronous) handlers |
1 | static void OutputHandler(object sendingProcess, DataReceivedEventArgs outLine) |
前兩行設定該資料流會交由 OutputHandler 來處理相關的輸出資料,當然你也可以在這邊多做一些處理,例如將輸出存到 log 存放區去。
基本上常用的操作差不多就這樣囉。
本篇完整範例程式碼請參考 poychang/Demo-ExecuteExternalExeApp。
參考資料: