> 백엔드 개발 > C++ > C#에서 Process.MainModule.FileName에 액세스할 때 Win32Exception을 방지하는 방법은 무엇입니까?

C#에서 Process.MainModule.FileName에 액세스할 때 Win32Exception을 방지하는 방법은 무엇입니까?

Susan Sarandon
풀어 주다: 2024-12-26 00:51:10
원래의
847명이 탐색했습니다.

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

C#에서 Process.MainModule.FileName 액세스: Win32 예외 방지

C#에서 Process.MainModule.FileName 속성에 액세스하려고 할 때, 개발자는 Win32Exception이 발생할 수 있습니다. 이 예외는 일반적으로 32비트(x86) 또는 AnyCPU 환경용 애플리케이션을 다시 컴파일하더라도 64비트 플랫폼에서 프로세스 모듈을 열거하는 동안 발생합니다.

문제의 코드는 종종 다음 형식을 취합니다.

Process p = Process.GetProcessById(2011);
string s = proc_by_id.MainModule.FileName;
로그인 후 복사

이 문제를 해결하기 위해 개발자는 참조 답변에 제안된 대로 Jeff Mercado가 제공한 코드를 활용할 수 있습니다. 이 코드는 특정 프로세스의 파일 경로를 검색하기 위해 약간 조정되었습니다.

string s = GetMainModuleFilepath(2011);
로그인 후 복사

GetMainModuleFilepath 메서드는 WMI(Windows Management Instrumentation)를 활용하여 Win32_Process 클래스에서 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;
}
로그인 후 복사

이 접근 방식을 활용하면 개발자는 Win32Exception을 우회하고 MainModule.FileName을 성공적으로 검색할 수 있습니다. 지정된 프로세스.

위 내용은 C#에서 Process.MainModule.FileName에 액세스할 때 Win32Exception을 방지하는 방법은 무엇입니까?의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!

원천:php.cn
본 웹사이트의 성명
본 글의 내용은 네티즌들의 자발적인 기여로 작성되었으며, 저작권은 원저작자에게 있습니다. 본 사이트는 이에 상응하는 법적 책임을 지지 않습니다. 표절이나 침해가 의심되는 콘텐츠를 발견한 경우 admin@php.cn으로 문의하세요.
저자별 최신 기사
인기 튜토리얼
더>
최신 다운로드
더>
웹 효과
웹사이트 소스 코드
웹사이트 자료
프론트엔드 템플릿