在 C# 中访问 Process.MainModule.FileName 时避免 Win32 异常
在 C# 中,尝试检索进程 MainModule 的 FileName 属性有时可能会触发 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) 中查询具有指定进程 ID 的进程的 ExecutablePath 属性。如果找到匹配的进程,则返回其文件路径。否则,返回 null。
以上是如何在 C# 中可靠地获取进程的文件路径并避免 Win32Exceptions?的详细内容。更多信息请关注PHP中文网其他相关文章!