64 비트 OS에서 실행되는 32 비트 응용 프로그램 목록을 가져와야하는 감사 응용 프로그램 용 C# 플러그 인을 작성하고 있습니다. 이 시점에서 32 비트 프로세스를 식별하는 방법에 대해 고민했습니다.32 비트 프로세스를 식별하는 방법
도와주세요.
64 비트 OS에서 실행되는 32 비트 응용 프로그램 목록을 가져와야하는 감사 응용 프로그램 용 C# 플러그 인을 작성하고 있습니다. 이 시점에서 32 비트 프로세스를 식별하는 방법에 대해 고민했습니다.32 비트 프로세스를 식별하는 방법
도와주세요.
IsWow64Process
windows API 호출을 사용하여 프로세스가 64 비트 OS에서 32 비트 에뮬레이션으로 실행되는지 확인할 수 있습니다. Process.GetProcesses()
모든 프로세스를 열거
업데이트입니다. 내 랩톱 컴퓨터에서 12ms 동안 93 개의 프로세스가 실행 중임
IsWow64Process
호출을 실행하면 약 10 분이 걸렸습니다. 동일한 랩톱에서 프로세스 당 0.1ms.기본적으로 :이 과정은 당신이 목록을 얻은 후 멀리 가서 당신이 그것을 쿼리 관리하기 전에 다음 PInvoke를 방법은 빠르고 빠르다는 나에게 WMI를 사용하는 것보다 보인다 사용 할 수 있다는 사실에 대처 할 수 있습니다. WMI는 (프로세스의 관점에서 볼 때) 덜 관입적인 방법 일 수 있습니다.
WMI로 가능하다고 생각합니다.
* 수행해서는 안되는 작업은 해당 스레드에서 언급 한 다른 솔루션 중 하나입니까? WMI 접근 방식을 따르십시오. 지금까지 가장 솔직한 솔루션입니다! –
Paul - 왜 WMI는 kernel32.dll을 PInvoking하는 모든 프로세스 핸들에 대해 WoW64 상태를 얻는 우수한 솔루션입니까? – stephbu
이 방법은 더 좋지만 모든 프로세스의 핸들을 여는 것이 특히 좋지 않으므로 프로세스를 쿼리하는 동안 프로세스가 종료 될 수 있으므로 경쟁 조건이 적용됩니다. WMI에는 이미 필요한 정보가 있으며 올바른 프로세스 목록을 얻는 데있어서의 뉘앙스에 대해 걱정할 필요가 없습니다. –
글쎄, 적어도 조그만 사건은 사실이 아닙니다. – ChrisWue