【问题标题】:Windows 32 or 64 bit using HKEY_LOCAL_MACHINE\Software\WOW6432 Node使用 HKEY_LOCAL_MACHINE\Software\WOW6432 节点的 Windows 32 或 64 位
【发布时间】:2011-01-24 07:13:24
【问题描述】:

我正在寻找一种非常简单的方法来确定客户使用的 Windows 版本是 32 位还是 64 位。我知道有使用 .NET 的方法,但我希望避免使用它们。我只是想用类似下面的伪代码,想知道这种方法是否可靠。

If Registry Key exists (HKEY_LOCAL_MACHINE\Software\WOW6432Node)
   Then Assume 64bit
else
   Assume 32bit

谢谢!

编辑:更具体地说,我知道有几种不同的方法可以实现确定操作系统是 32 位还是 64 位的目标。但我想知道上述单独的方法是否可靠。

【问题讨论】:

    标签: windows 64-bit 32-bit


    【解决方案1】:

    您可以检查环境变量 PROCESSOR_ARCHITECTURE。如果是 AMD64,那么你使用的是 64 位操作系统,但这不安全(在阅读 cmets 之后)

    但为了安全起见,您可以从Raymond Chen 调用此blog post 中提到的Win32 API IsWow64Process。

    【讨论】:

    • ...除非脚本在 c:\windows\syswow64\cmd.exe 中运行,其中定义为 PROCESSOR_ARCHITECTURE=x86 并且有一个单独的 PROCESSOR_ARCHITEW6432 =AMD64
    【解决方案2】:

    为什么不检查文件夹C:\Program Files (x86) 是否存在?这将向您保证它是 64 位操作系统。

    【讨论】:

    • ...除非某些程序在安装过程中创建了它,即使它安装在 32 位机器上。 :-)
    • 不太可能但有可能^^
    • ...或者您正在本地化版本的 Windows 上运行
    【解决方案3】:

    我假设您在 32 位进程中运行(否则您已经知道答案了)。您的问题的解决方案是IsWow64ProcessGetNativeSystemInfo

    【讨论】:

      【解决方案4】:

      我希望这可以解决我在 Windows 8.1 64 位上尝试过的问题,它为我返回值 AMD64

      import _winreg
      def get_registry_value(key, subkey, value):
      
        key = getattr(_winreg, key)
        handle = _winreg.OpenKey(key, subkey )
        (value, type) = _winreg.QueryValueEx(handle, value)
        return value
      
      windowsbit = get_registry_value(
      "HKEY_LOCAL_MACHINE",
      "SYSTEM\\CurrentControlSet\Control\\Session Manager\\Environment",
      "PROCESSOR_ARCHITECTURE")
      print windowsbit
      

      如果您在 64 位 Windows 机器上工作,只需运行此代码,这将打印 AMD64

      或者如果您使用的是 32 位,它将打印 AMD32

      我希望这段代码可以帮助彻底解决这个问题

      【讨论】:

        猜你喜欢
        • 2012-10-26
        • 2019-01-07
        • 2021-05-22
        • 1970-01-01
        • 2011-10-24
        • 2011-09-12
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多