在 C# 中访问 Process.MainModule.FileName:避免 Win32 异常
尝试在 C# 中访问 Process.MainModule.FileName 属性时,开发人员可能会遇到 Win32Exception。尽管针对 32 位 (x86) 或 AnyCPU 环境重新编译应用程序,但在 64 位平台上枚举进程模块时通常会遇到此异常。
相关代码通常采用以下形式:
Process p = Process.GetProcessById(2011); string s = proc_by_id.MainModule.FileName;
为了解决此问题,开发人员可以利用 Jeff Mercado 提供的代码,如参考答案中的建议。此代码已稍作修改,以检索特定进程的文件路径:
string s = GetMainModuleFilepath(2011);
GetMainModuleFilepath 方法利用 Windows Management Instrumentation (WMI) 查询 Win32_Process 类的 ExecutablePath 属性:
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; }
通过利用这种方法,开发人员可以绕过 Win32Exception 并成功检索指定的 MainModule.FileName过程。
以上是在 C# 中访问 Process.MainModule.FileName 时如何避免 Win32Exceptions?的详细内容。更多信息请关注PHP中文网其他相关文章!