Maison > développement back-end > C++ > Pourquoi l'accès à Process.MainModule.FileName génère-t-il des exceptions Win32 et comment WMI peut-il fournir une solution ?

Pourquoi l'accès à Process.MainModule.FileName génère-t-il des exceptions Win32 et comment WMI peut-il fournir une solution ?

Linda Hamilton
Libérer: 2024-12-30 17:21:14
original
218 Les gens l'ont consulté

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

Résolution des exceptions Win32 lors de l'accès à Process.MainModule.FileName en C

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).

Problème d'origine

Process p = Process.GetProcessById(2011);
string s = proc_by_id.MainModule.FileName;
Copier après la connexion

Solution

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.

Implémentation

string s = GetMainModuleFilepath(2011);
Copier après la connexion
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;
}
Copier après la connexion

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 de ce site Web
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
Derniers articles par auteur
Tutoriels populaires
Plus>
Derniers téléchargements
Plus>
effets Web
Code source du site Web
Matériel du site Web
Modèle frontal