在C# 中存取Process.MainModule.FileName 時避免Win32 異常
在C# 中,嘗試擷取行程MainModule 的Name 屬性有時可能的Name 屬性會觸發Win32Exception,特別是在使用64 位元平台時。為了解決這個問題,Jeff Mercado 的解決方案提供了一個可靠的方法。
改編的程式碼:
為了簡化流程,這裡對 Mercado的程式碼進行了改編,用於取得檔案路徑某具體的process:
string s = GetMainModuleFilepath(2011);
實作:
private string GetMainModuleFilepath(int processId) { string wmiQueryString = "SELECT ProcessId, ExecutablePath FROM Win32_Process WHERE ProcessId = " + processId; using (var searcher = new ManagementObjectSearcher(wmiQueryString)) { using (var results = searcher.Get()) { ManagementObject mo = results.Cast<ManagementObject>().FirstOrDefault(); if (mo != null) { return (string)mo["ExecutablePath"]; } } } return null; }
此方法在Windows Management Instrumentation (WMI Management Instrumentation ) 中查詢具有指定進程ID 的進程的ExecutablePath 屬性。如果找到匹配的進程,則返回其檔案路徑。否則,傳回 null。
以上是如何在 C# 中可靠地獲取進程的檔案路徑並避免 Win32Exceptions?的詳細內容。更多資訊請關注PHP中文網其他相關文章!