在自己的行程內部,我們可以透過 Main
函式傳入的引數,也可以透過 Environment.GetCommandLineArgs
來獲取命令列引數。
但是,可以透過什麼方式來獲取另一個執行著的程式的命令列引數呢?
行程內部獲取傳入引數的方法,可以參見我的另一篇部落格:.NET 命令列引數包含應用程式路徑嗎?。
.NET Framework / .NET Core 框架內部是不包含獲取其他行程命令列引數的方法的,但是我們可以在任務管理器中看到,說明肯定存在這樣的方法。
實際上方法是有的,不過這個方法是 Windows 上的專屬方法。
對於 .NET Framework,需要取用程式集 System.Management
;對於 .NET Core 需要取用 Microsoft.Windows.Compatibility
這個針對 Windows 系統準備的相容包(不過這個相容包目前還是預覽版本)。
然後,我們使用ManagementObjectSearcher
和ManagementBaseObject
來獲取命令列引數。
為了簡便,我將其封裝成一個擴充套件方法,其中包括對於一些異常的簡單處理。
使用此方法得到的命令列引數是一個字串,而不是我們通常使用字串時的字串陣列。如果你需要將其轉換為字串陣列,可以使用我在另一篇部落格中使用的方法:
- .NET/C# 將一個命令列引數字串轉換為命令列引數陣列 args
參考資料
本文會經常更新,請閱讀原文: https://walterlv.com/post/get-command-line-for-a-running-process.html ,以避免陳舊錯誤知識的誤導,同時有更好的閱讀體驗。
如果你想持續閱讀我的最新部落格,請點選 RSS 訂閱,或者前往 CSDN 關註我的主頁。
原文地址:https://walterlv.com/post/get-command-line-for-a-running-process.html