>백엔드 개발 >C++ >Process.MainModule.FileName에 액세스하면 Win32Exception이 발생하는 이유는 무엇이며 WMI는 어떻게 솔루션을 제공할 수 있습니까?

Process.MainModule.FileName에 액세스하면 Win32Exception이 발생하는 이유는 무엇이며 WMI는 어떻게 솔루션을 제공할 수 있습니까?

Linda Hamilton
Linda Hamilton원래의
2024-12-30 17:21:14166검색

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

C에서 Process.MainModule.FileName에 액세스할 때 Win32Exception 해결

실행 중인 프로세스 열거와 관련된 C# 프로젝트에서 특정 프로세스에 대해 Process.MainModule의 FileName 속성에 액세스 프로세스는 "프로세스 모듈을 나열하는 동안 오류가 발생했습니다."라는 메시지와 함께 Win32Exception 오류를 트리거할 수 있습니다. 이 문제는 컴파일 대상(x86, AnyCPU)에 관계없이 지속됩니다.

원래 문제

Process p = Process.GetProcessById(2011);
string s = proc_by_id.MainModule.FileName;

해결 방법

Jeff Mercado가 제안한 대로 Windows Management Instrumentation( WMI)는 이 오류를 피할 수 있습니다. 특히 Win32_Process 클래스의 ExecutablePath 속성을 사용하여 기본 모듈 파일 경로를 검색할 수 있습니다.

구현

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;
}

위 내용은 Process.MainModule.FileName에 액세스하면 Win32Exception이 발생하는 이유는 무엇이며 WMI는 어떻게 솔루션을 제공할 수 있습니까?의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!

성명:
본 글의 내용은 네티즌들의 자발적인 기여로 작성되었으며, 저작권은 원저작자에게 있습니다. 본 사이트는 이에 상응하는 법적 책임을 지지 않습니다. 표절이나 침해가 의심되는 콘텐츠를 발견한 경우 admin@php.cn으로 문의하세요.