首頁 > 後端開發 > C++ > 為什麼存取 Process.MainModule.FileName 會拋出 Win32Exceptions,WMI 如何提供解決方案?

為什麼存取 Process.MainModule.FileName 會拋出 Win32Exceptions,WMI 如何提供解決方案?

Linda Hamilton
發布: 2024-12-30 17:21:14
原創
166 人瀏覽過

Why Does Accessing Process.MainModule.FileName Throw Win32Exceptions, and How Can WMI Provide a Solution?

在C 中存取Process.MainModule.FileName 時解決Win32Exceptions

在涉及枚舉正在執行的進程的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中文網其他相關文章!

來源:php.cn
本網站聲明
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn
作者最新文章
熱門教學
更多>
最新下載
更多>
網站特效
網站源碼
網站素材
前端模板