Dans les projets C# impliquant l'énumération des processus en cours d'exécution, accès à la propriété FileName de Process.MainModule pour certains les processus peuvent déclencher des erreurs Win32Exception avec le message « Une erreur s'est produite lors de la liste des modules de processus ». Ce problème persiste quelle que soit la cible de compilation (x86, AnyCPU).
Process p = Process.GetProcessById(2011); string s = proc_by_id.MainModule.FileName;
Comme suggéré par Jeff Mercado, tirer parti de Windows Management Instrumentation ( WMI) peut contourner cette erreur. Plus précisément, la propriété ExecutablePath de la classe Win32_Process peut être utilisée pour récupérer le chemin du fichier du module principal.
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; }
Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!