我如何知道某个处于运行状态的进程的位数。(不是当前的.. IntPtr.size 有用的地方) iswow64process()... 仅给出它是否是 WoW64 进程,但不输出 32/64 位.. 任何人都可以帮忙..
3 回答
如果您知道您在 64 位 Windows 上运行,那么如果它是在 WoW64 模式下运行的进程,那么它必须是 32 位(这就是 WoW64 的用途 - 在 64 位 Windows 上运行 32 位应用程序),如果不是那么你可以假设64位。
来自MSDN:
WOW64 是 x86 仿真器,它允许基于 32 位 Windows 的应用程序在 64 位 Windows 上无缝运行。
也从这里:
[IsWow64Process] 如果进程在 WOW64 下运行,则指向设置为 TRUE 的值的指针。如果进程在 32 位 Windows 下运行,则该值设置为 FALSE。如果进程是在 64 位 Windows 下运行的 64 位应用程序,则该值也设置为 FALSE。
IsWow64Process
是正确的做法。在 WOW64 下运行仅适用于 64 位操作系统上的 32 位进程。
真正的麻烦在于发现您运行的是 64 位版本的 Windows。使用 IntPtr.Size 还不够好,您的程序可能被迫在 32 位模式下运行。您必须 P/Invoke GetNativeSystemInfo() 以获取 SYSTEM_INFO.wProcessorArchitecture。
注意这些 P/Invokes 的异常,API 函数在 XP 和更早版本中不可用。当您从 IsWow64Process 获得一个时,您就会知道它是一个 32 位操作系统。您可以使用 LoadLibrary 和 GetProcAddress 避免异常。