1

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

4

3 回答 3

4

如果您知道您在 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。

于 2010-01-04T11:43:44.103 回答
3

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

于 2010-01-04T11:45:50.900 回答
3

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

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

于 2010-01-04T12:24:27.577 回答