Accès à Process.MainModule.FileName en C# : éviter les exceptions Win32
Lors de la tentative d'accès à la propriété Process.MainModule.FileName en C#, les développeurs peuvent rencontrer une Win32Exception. Cette exception est généralement rencontrée lors de l'énumération des modules de processus sur une plate-forme 64 bits, malgré la recompilation de l'application pour des environnements 32 bits (x86) ou AnyCPU.
Le code en question prend souvent la forme suivante :
Process p = Process.GetProcessById(2011); string s = proc_by_id.MainModule.FileName;
Pour résoudre ce problème, les développeurs peuvent exploiter le code fourni par Jeff Mercado, comme suggéré dans la réponse de référence. Ce code a été légèrement adapté pour récupérer le chemin de fichier d'un processus spécifique :
string s = GetMainModuleFilepath(2011);
La méthode GetMainModuleFilepath utilise Windows Management Instrumentation (WMI) pour interroger la classe Win32_Process pour la propriété ExecutablePath :
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; }
En utilisant cette approche, les développeurs peuvent contourner l'exception Win32 et récupérer avec succès le MainModule.FileName pour le spécifié. processus.
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!