在涉及枚举正在运行的进程的 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中文网其他相关文章!