【问题标题】:Why %processor_architecture% always returns x86 instead of AMD64为什么 %processor_architecture% 总是返回 x86 而不是 AMD64
【发布时间】:2010-12-16 21:00:31
【问题描述】:

我正在尝试检索环境变量以检测系统是 32 位还是 64 位。 但是在 64 位服务器上,环境变量 %processor_architecture% 返回的是 x86 而不是 AMD64

有人知道这件事吗?

【问题讨论】:

  • bash 标签?我假设这仅适用于Windows。你运行的是什么版本?
  • 伙计们,我认为这是 MCG 和 bobince 建议的问题。
  • 我遇到了与 Jenkins 类似的问题。我的会话是从 C:\Windows\SYSWOW64 中的 CMD.exe 控制台运行的,但仍然没有运气,但如果 JVM 设置为 x86,那么……可能会变得棘手……

标签: windows command-line batch-file


【解决方案1】:

最可靠的解决方案:

方法一:
(使用PROCESSOR_ARCHITECTUREPROCESSOR_ARCHITEW6432进行两步验证)

set Arch=x64
if "%PROCESSOR_ARCHITECTURE%" == "x86" ( 
    if not defined PROCESSOR_ARCHITEW6432 set Arch=x86
) 

if "%Arch%" == "x64"    (
    msg * "yessss"
) else  (
    msg * "noooo"
)

方法二:

reg Query "HKLM\Hardware\Description\System\CentralProcessor\0" | find /i "x32" > NUL && set OS=32BIT || set OS=64BIT

if %OS%==32BIT echo "YESSS"
if %OS%==64BIT echo "NOOO"

来源:https://superuser.com/a/293143/249349

【讨论】:

  • 为了让你的方法 1 在 Win8.1 上为我工作,必须引用 Arch 的测试,所以 if "%Arch%" == "x64"
【解决方案2】:

您可能得到了错误的环境变量。如果您的应用程序是在 64 位操作系统上运行的 32 位应用程序,则此环境变量的进程版本将返回 x86。如果要查找机器的架构,可以从以下注册表项中获取:

HKEY_LOCAL_MACHINE\System\CurrentControlSet\Control\Session Manager\Environment\PROCESSOR_ARCHITECTURE

或者,如果您使用的是 .NET,那么您可以使用此调用来获取它:

string arch = System.Environment.GetEnvironmentVariable("PROCESSOR_ARCHITECTURE", 
    EnvironmentVariableTarget.Machine);

从命令行你可以试试这个:

reg query "HKLM\System\CurrentControlSet\Control\Session Manager\Environment" /v PROCESSOR_ARCHITECTURE

使用cmd还有一个更简单的解决方案:

ECHO %PROCESSOR_ARCHITECTURE%

【讨论】:

  • 我刚试过这个,它正在工作。非常感谢您的帮助。
  • 谢谢。我刚刚遇到了这个问题。 MS - 一群脑外科医生。一个变量,它告诉您当前正在执行的二进制文件 的目标平台。鱼、自行车、to、etbloodycetra 的用处。
  • 完美,我正在从 64 位架构的 32 位版本 exe 启动我的批处理文件,因此遇到了同样的问题。
【解决方案3】:

假设 64 位 PC 安装了 64 位 Windows。

%processor_architecture% 仅在获取 32 位程序中的值时返回 x86。在 64 位程序中,它会正确返回 AMD64

示例:执行echo %processor_architecture% from:

  • 32位统帅
  • 64 位资源管理器

【讨论】:

  • 你说的这个 64 位资源管理器是什么?能给个链接吗?
  • @bigp,它是内置的文件管理器,也就是 Windows 资源管理器 (explorer.exe)。运行64位Windows安装,这家伙是64位程序。
  • 这就是我的答案,普通的 Windows 控制台是 64 位的,但从总指挥官开始显示 x86 thx 解决了我的问题
【解决方案4】:

为挖坟道歉。但是,处理器架构环境变量可以通过 powershell 访问...

$env:PROCESSOR_ARCHITECTURE

【讨论】:

    【解决方案5】:

    我在我的 Win7HB x64 系统上找到:

    msgbox wscript.createobject("wscript.shell").environment("system").item("processor_architecture") ' always "AMD64"
    
    msgbox wscript.createobject("wscript.shell").environment("process").item("processor_architecture") ' "AMD64" if launched via System32, "x86" if launched via SysWOW64
    

    【讨论】:

      【解决方案6】:

      我认为这种方式的部分原因是 x86-64 架构必须允许 32 位程序将其视为(尽可能)与 32 位环境相同,并确保 32位程序不认为它只是 64 位(如 Itanium 架构)。

      然而,这让那些需要在 Windows 上了解 x86-64 架构与 32 位架构之间差异的人感到非常沮丧。

      【讨论】:

        【解决方案7】:

        您也可以从环境变量PROCESSOR_ARCHITEW6432 中获取此信息。请参阅this 文章了解更多信息。

        【讨论】:

        【解决方案8】:

        AMD64是基于x86架构的CPU品牌。 x86-64 更准确地说,是 x86 的 64 位扩展。

        This 也与 bobince 的回答有关。

        Knowledge Base article 向您展示如何确定您的系统是 32 位还是 64 位

        【讨论】:

        • 那么有没有办法使用批处理文件找出系统是64位还是32位。
        【解决方案9】:

        您实际上运行的是 64 位版本的 Windows 吗?如果您在支持 64 位的 CPU 上运行 32 位 Windows,您仍然会得到 x86

        【讨论】:

        • 我实际上运行的是 64 位版本。我可以从我的计算机属性中看到这一点。
        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2021-11-16
        • 1970-01-01
        • 2021-01-24
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多