Heim >Backend-Entwicklung >C++ >Warum löst der Zugriff auf Process.MainModule.FileName Win32Exceptions aus und wie kann WMI eine Lösung bieten?

Warum löst der Zugriff auf Process.MainModule.FileName Win32Exceptions aus und wie kann WMI eine Lösung bieten?

Linda Hamilton
Linda HamiltonOriginal
2024-12-30 17:21:14199Durchsuche

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

Auflösen von Win32Exceptions beim Zugriff auf Process.MainModule.FileName in C

In C#-Projekten, die die Aufzählung laufender Prozesse beinhalten, ist der Zugriff auf die FileName-Eigenschaft von Process.MainModule sicher Prozesse können Win32Exception-Fehler mit der Meldung „Beim Auflisten der Prozessmodule ist ein Fehler aufgetreten“ auslösen. Dieses Problem besteht unabhängig vom Kompilierungsziel (x86, AnyCPU) weiterhin.

Ursprüngliches Problem

Process p = Process.GetProcessById(2011);
string s = proc_by_id.MainModule.FileName;

Lösung

Wie von Jeff Mercado vorgeschlagen, nutzt die Windows-Verwaltungsinstrumentation ( WMI) kann diesen Fehler umgehen. Insbesondere kann die ExecutablePath-Eigenschaft der Win32_Process-Klasse verwendet werden, um den Dateipfad des Hauptmoduls abzurufen.

Implementierung

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;
}

Das obige ist der detaillierte Inhalt vonWarum löst der Zugriff auf Process.MainModule.FileName Win32Exceptions aus und wie kann WMI eine Lösung bieten?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!

Stellungnahme:
Der Inhalt dieses Artikels wird freiwillig von Internetnutzern beigesteuert und das Urheberrecht liegt beim ursprünglichen Autor. Diese Website übernimmt keine entsprechende rechtliche Verantwortung. Wenn Sie Inhalte finden, bei denen der Verdacht eines Plagiats oder einer Rechtsverletzung besteht, wenden Sie sich bitte an admin@php.cn