Maison >développement back-end >C++ >Comment éviter les exceptions Win32 lors de l'accès à Process.MainModule.FileName en C# ?

Comment éviter les exceptions Win32 lors de l'accès à Process.MainModule.FileName en C# ?

Susan Sarandon
Susan Sarandonoriginal
2024-12-26 00:51:10916parcourir

How to Avoid Win32Exceptions When Accessing Process.MainModule.FileName in C#?

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!

Déclaration:
Le contenu de cet article est volontairement contribué par les internautes et les droits d'auteur appartiennent à l'auteur original. Ce site n'assume aucune responsabilité légale correspondante. Si vous trouvez un contenu suspecté de plagiat ou de contrefaçon, veuillez contacter admin@php.cn