2011-04-13 6 views
4

64 비트 OS에서 실행되는 32 비트 응용 프로그램 목록을 가져와야하는 감사 응용 프로그램 용 C# 플러그 인을 작성하고 있습니다. 이 시점에서 32 비트 프로세스를 식별하는 방법에 대해 고민했습니다.32 비트 프로세스를 식별하는 방법

도와주세요.

답변

2

IsWow64Process windows API 호출을 사용하여 프로세스가 64 비트 OS에서 32 비트 에뮬레이션으로 실행되는지 확인할 수 있습니다. Process.GetProcesses() 모든 프로세스를 열거

  • 약으로 대부분의 시간을 소요 : 나는 다음과 같은 결과로,이 조금 벤치마킹 : 여기

    pinvoke link

    업데이트입니다. 내 랩톱 컴퓨터에서 12ms 동안 93 개의 프로세스가 실행 중임

  • 핸들을 얻고 IsWow64Process 호출을 실행하면 약 10 분이 걸렸습니다. 동일한 랩톱에서 프로세스 당 0.1ms.
  • WMI를 사용하는 모든 프로세스를 얻는 데는 약 5 분이 걸렸습니다. 동일한 랩톱에서 520ms (93 프로세스 실행 중).

기본적으로 :이 과정은 당신이 목록을 얻은 후 멀리 가서 당신이 그것을 쿼리 관리하기 전에 다음 PInvoke를 방법은 빠르고 빠르다는 나에게 WMI를 사용하는 것보다 보인다 사용 할 수 있다는 사실에 대처 할 수 있습니다. WMI는 (프로세스의 관점에서 볼 때) 덜 관입적인 방법 일 수 있습니다.

+2

이 방법은 더 좋지만 모든 프로세스의 핸들을 여는 것이 특히 좋지 않으므로 프로세스를 쿼리하는 동안 프로세스가 종료 될 수 있으므로 경쟁 조건이 적용됩니다. WMI에는 이미 필요한 정보가 있으며 올바른 프로세스 목록을 얻는 데있어서의 뉘앙스에 대해 걱정할 필요가 없습니다. –

+0

글쎄, 적어도 조그만 사건은 사실이 아닙니다. – ChrisWue

2
+0

* 수행해서는 안되는 작업은 해당 스레드에서 언급 한 다른 솔루션 중 하나입니까? WMI 접근 방식을 따르십시오. 지금까지 가장 솔직한 솔루션입니다! –

+0

Paul - 왜 WMI는 kernel32.dll을 PInvoking하는 모든 프로세스 핸들에 대해 WoW64 상태를 얻는 우수한 솔루션입니까? – stephbu

관련 문제