2011-04-13 30 views
4

我正在爲審計應用程序編寫一個C#插件,該應用程序需要獲取在64位操作系統內運行的32位應用程序的列表。關於如何識別32位進程,我在這一點上陷入困​​境。如何識別32位進程

請幫幫我。

回答

2

您可以使用IsWow64Process Windows API調用來確定進程是否在64位操作系統上的32位仿真下運行。

這裏是pinvoke link

更新:我這個基準一點點,結果如下:

  • 枚舉所有的進程與Process.GetProcesses()需要大部分的時間約在我的筆記本電腦上有12個運行的進程有93個進程
  • 獲取句柄並執行IsWow64Process調用花費了大約100美元。在同一檯筆記本電腦上每個進程0.1毫秒。
  • 用WMI獲取所有的流程大約需要幾分鐘。在同一檯筆記本電腦上520ms(同時運行93個進程)。

基本上是:如果你能的事實,你得到的名單後的過程可能會離開,你設法查詢之前,然後使用PInvoke的方式似乎比使用WMI更快,迅捷我應付。儘管從流程角度來看,WMI可能是較不干擾的方式。

+2

這種方法更好,但會受到競爭條件的限制,因爲打開每個進程的句柄並不特別活潑,當他試圖查詢它時,進程可能會消失。 WMI已經擁有了他所需要的信息,而且他不必擔心獲得正確的流程清單的細微差別 – 2011-04-13 07:01:09

+0

嗯,至少這種快樂並不完全正確。 – ChrisWue 2011-04-14 09:45:31

相關問題