我正在尝试检索环境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:
AMD64是基于x86架构的CPU品牌。 x86-64更准确地说,这是x86的64位扩展。
这也涉及到bobince的回答。
这篇知识库文章向您展示了如何确定您的系统是32位还是64位
方法1:
(使用PROCESSOR_ARCHITECTURE
和PROCESSOR_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