为什么%processor_architecture%总是返回x86而不是AMD64

时间:2009-11-15 21:54:49

标签: windows command-line batch-file

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

有没有人对此有任何线索?

9 个答案:

答案 0 :(得分:49)

您可能获得了错误的环境变量。如果您的应用程序是在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%

答案 1 :(得分:10)

您也可以从环境变量PROCESSOR_ARCHITEW6432获取此信息。有关详细信息,请参阅this文章。

答案 2 :(得分:8)

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

答案 3 :(得分:4)

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

只有在32位程序中获取值时,

%processor_architecture%才会返回 x86 。在64位程序中,它正确返回 AMD64

示例:执行echo %processor_architecture%来自:

  • 32位总指挥官
  • 64位资源管理器

答案 4 :(得分:3)

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

This也与bobince的答案有关。

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

答案 5 :(得分:3)

最可靠的解决方案:

方法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"
)

方法2:

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

答案 6 :(得分:1)

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

然而,对于那些需要在Windows上访问x86-64架构与32位架构之间差异的人来说,这非常令人沮丧。

答案 7 :(得分:1)

为严肃的挖掘道歉。但是,可以通过powershell访问处理器体系结构环境变量......

$env:PROCESSOR_ARCHITECTURE

答案 8 :(得分:0)

我在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