C#:如何检测其他进程的位数...而不是当前进程的位数

时间:2010-01-04 11:38:37

标签: c# process 32bit-64bit

我如何知道处于运行状态的某个进程的位数。 (不是当前的..其中IntPtr.size是有用的)iswow64process()...只给出它是否是一个WoW64进程,但不输出32/64位..任何人都可以帮助..

3 个答案:

答案 0 :(得分:4)

如果你知道你在64位窗口上运行,那么如果一个进程在WoW64模式下运行,那么它必须是32位(这就是WoW64的用途 - 在64位Windows上运行32位应用程序)如果没有,那么你可以假设64位。

来自MSDN

  

WOW64是允许的x86模拟器   32位基于Windows的应用程序   在64位Windows上无缝运行。

同样来自here

  

[IsWow64Process]指向设置为的值的指针   如果进程正在运行,则为TRUE   WOW64。如果进程正在运行   32位Windows,该值设置为   假。如果进程是64位   应用程序在64位下运行   Windows,该值也设置为   FALSE。

答案 1 :(得分:3)

IsWow64Process是正确的方法。在WOW64下运行仅适用于64位操作系统上的32位进程。

答案 2 :(得分:3)

真正的麻烦在于发现您在64位版本的Windows上运行。使用IntPtr.Size不够好,您的程序可能被迫以32位模式运行。您必须P / Invoke GetNativeSystemInfo()才能获得SYSTEM_INFO.wProcessorArchitecture。

注意这些P / Invokes中的异常,API函数在XP及更早版本中不可用。当您从IsWow64Process获得一个时,您将知道它是一个32位操作系统。您可以使用LoadLibrary和GetProcAddress来避免异常。