在涉及枚舉正在執行的進程的C# 專案中,存取Process.MainModule 的FileName 屬性對於某些情況進程可能會觸發Win32Exception錯誤,並顯示訊息「列出進程模組時發生錯誤」。無論編譯目標為何(x86、AnyCPU),此問題仍然存在。
Process p = Process.GetProcessById(2011); string s = proc_by_id.MainModule.FileName;
按照 Jeff Mercado 的建議,利用 Windows Management Instrumentation ( WMI)可以避免此錯誤。具體來說,Win32_Process 類別的 ExecutablePath 屬性可用於檢索主模組檔案路徑。
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; }
以上是為什麼存取 Process.MainModule.FileName 會拋出 Win32Exceptions,WMI 如何提供解決方案?的詳細內容。更多資訊請關注PHP中文網其他相關文章!