Heim >Backend-Entwicklung >C++ >Warum löst der Zugriff auf Process.MainModule.FileName Win32Exceptions aus und wie kann WMI eine Lösung bieten?
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.
Process p = Process.GetProcessById(2011); string s = proc_by_id.MainModule.FileName;
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.
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!