问题描述
|
我正在为审核应用程序编写C#插件,该插件需要获取在64位OS中运行的32位应用程序的列表。在这一点上,我对如何识别32位进程感到困惑。
请帮我。
解决方法
您可以使用
IsWow64Process
Windows API调用来确定进程是否在64位OS上以32位仿真运行。
这是pinvoke链接
更新:我对此进行了一些基准测试,结果如下:
用Process.GetProcesses()
枚举所有过程花费了大部分时间,大约为。我的笔记本电脑上有12毫秒运行93个进程
获取句柄并执行IsWow64Process
调用大约需要花费时间。同一台笔记本电脑上每个进程0.1ms。
使用WMI获取所有流程大约需要花费大约30%的时间。同一台笔记本电脑上为520毫秒(正在运行93个进程)。
基本上:如果您可以解决以下问题:在获取列表之后,设法进行查询之前,该过程可能会消失,那么使用pinvoke方式对我来说似乎比使用WMI更快更灵活。尽管WMI可能是侵入性较小的方法(从过程的角度来看)。
,看看http://social.msdn.microsoft.com/Forums/en-US/netfxtoolsdev/thread/491ea0b3-3e5b-4fa2-a2c3-2f1e485aed0c/。
我认为WMI有可能。