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

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

有没有人有任何线索呢?

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

你也可以从一个环境变量PROCESSOR_ARCHITEW6432得到这个。 看到这篇文章的更多信息。

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

假设使用64位Windows安装的64位PC。

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

例如:执行echo %processor_architecture% from:

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

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

这也涉及到bobince的回答。

这篇知识库文章向您展示了如何确定您的系统是32位还是64位

最可靠的解决方案:

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

我认为这样做的部分原因是,x86-64架构必须允许32位程序将其视为与32位环境完全相同(尽可能),并确保32位程序不要以为它只有64位(像Itanium架构)。

然而,这使得那些需要访问Windows上的x86-64体系结构与32位体系结构之间的差异的人非常沮丧。

道歉的严重挖。 但是,处理器体系结构的环境变量是可以通过PowerShell的…

 $env:PROCESSOR_ARCHITECTURE 

我发现我的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