【问题标题】:Is there a Windows API call that will tell me if I'm running on a 64-bit OS?是否有 Windows API 调用会告诉我我是否在 64 位操作系统上运行?
【发布时间】:2010-12-11 09:52:20
【问题描述】:

是否有一个 Windows API 调用可以告诉我我是否在 64 位操作系统上运行?我有一些遗留的 c++ 代码调用 GetVersionEx 来填充 OSVERSIONINFO 结构,但这只会告诉我(AFAIK)操作系统(Vista、V7 等),而不是处理架构。我可以通过简单地寻找“C:\ Program Files(x86)......”的存在来解决这个问题,但这看起来很难看。我确定必须有一个 API 才能返回此信息。

【问题讨论】:

  • 只是出于好奇,您为什么需要知道?如果预编译指令不是不能做的事吗?
  • @Rowland:在程序发布后无法做到这一点。此外,64 位操作系统在硬件层上与 32 位操作系统有很大不同;即 32 位驱动程序安装程序应在安装前检测主机操作系统的“位数”。
  • 我认为 WOW 处理了与驱动程序等人的对话 - 我假设上述驱动程序的安装将通过安装框架完成;只是出于好奇,目的是了解为什么需要这样做......

标签: windows winapi


【解决方案1】:

IsWow64Process 可能就是您要找的。​​p>

【讨论】:

  • 请注意,如果从 64 位应用程序运行此函数总是返回 false(因为 64 位应用程序未在 WoW64 模式下运行)。
  • 当然。 (当然,检测当前应用程序是否为 64 位应用程序可以在编译时完成,例如通过 msvc 中的_M_X64
【解决方案2】:

GetNativeSystemInfo()

【讨论】:

    【解决方案3】:

    我发现这篇文章似乎提供了一个很好的答案:Detect whether current Windows version is 32 bit or 64 bit

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

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

    【讨论】:

      【解决方案4】:

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

      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
      }
      

      这回答了您提出的问题。您应该问的问题的答案已经发布在response by Jerry Coffin 中:只需致电GetNativeSystemInfo

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2023-03-08
        • 1970-01-01
        • 1970-01-01
        • 2012-07-01
        • 2010-09-20
        • 2023-04-01
        • 1970-01-01
        相关资源
        最近更新 更多