首頁 >後端開發 >C++ >如何在沒有 Win32Exception 的情況下存取 Process.MainModule.FileName?

如何在沒有 Win32Exception 的情況下存取 Process.MainModule.FileName?

Barbara Streisand
Barbara Streisand原創
2024-12-31 21:14:15575瀏覽

How to Access Process.MainModule.FileName Without a Win32Exception?

在沒有Win32 異常的情況下存取Process.MainModule.FileName

使用Process.GetProcessById 方法擷取正在執行的進程的路徑時,您可以遇到阻止您存取MainModule.FileName 屬性的Win32Exception。當嘗試從某些進程檢索模組資訊時,會出現此異常。

解決方案:

要避免此問題,您可以採用 Jeff Mercado 概述的方法。以下程式碼示範如何取得特定進程的完整檔案路徑:

string s = GetMainModuleFilepath(2011);

這是GetMainModuleFilepath 方法的實作:

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) ,可以查詢進程資訊並提取可執行路徑,而不會觸發Win32Exception。

以上是如何在沒有 Win32Exception 的情況下存取 Process.MainModule.FileName?的詳細內容。更多資訊請關注PHP中文網其他相關文章!

陳述:
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn