有没有Windows API调用可以告诉我是否在64位操作系统上运行?

3
有没有一个Windows API调用可以告诉我是否在64位操作系统上运行?我有一些遗留的C++代码,它调用GetVersionEx来填充OSVERSIONINFO结构,但这只告诉我(据我所知)操作系统(Vista、V7等),而不是处理架构。我可以通过查找“C:\Program Files (x86)...”文件夹的存在来解决这个问题,但这似乎很丑陋。我相信一定有一个API可以返回这个信息。

只是出于好奇,你为什么需要知道呢?这不是一些预编译指令就能解决的事情吗? - Rowland Shaw
@Rowland:程序发布后无法完成此操作。此外,64位操作系统在硬件层面上与32位操作系统有显著的不同;即32位驱动程序安装程序应在安装之前检测主机操作系统的“位数”。 - Cecil Has a Name
我认为WOW处理与驱动程序等的对话 - 我会假设安装这些驱动程序将使用安装框架完成; 只是出于好奇想要了解为什么需要这样做... - Rowland Shaw
4个回答

7

1
请注意,如果从64位应用程序中运行此函数,则该函数始终返回false(因为64位应用程序不在WoW64模式下运行)。 - Powerlord
1
当然可以。识别当前应用程序是否为64位应用程序可以在编译时完成,例如通过msvc中的_M_X64 - Michael

4

GetNativeSystemInfo()


1

我找到了这篇文章,它似乎提供了一个很好的答案:检测当前 Windows 版本是 32 位还是 64 位

我不知道为什么在发布之前搜索 Stack Overflow 时它没有出现。

顺便说一下,对我来说最好的解决方案是简单地检查 ProgramW6432 环境变量。


0

解决方案非常简单。如果您正在为64位编译,那么您已经知道您正在运行64位版本的Windows。所以只需要在32位编译时调用IsWow64Process。下面的实现将返回true,如果它正在运行在64位版本的Windows上:

bool Is64BitPlatform() {
    #if defined(_WIN64)
        return true;  // 64-bit code implies a 64-bit OS
    #elif defined(_WIN32)
        // 32-bit code runs on a 64-bit OS, if IsWow64Process returns TRUE
        BOOL f = FALSE;
        return ::IsWow64Process(GetCurrentProcess(), &f) && f;
    #else
        #error Unexpected platform.
    #endif
}

这是你所问问题的答案。然而,你应该问的问题的答案已经在Jerry Coffin的回复中发布了:只需调用GetNativeSystemInfo即可。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接