我正在尝试检索环境变量以检测系统是32位还是64位。
但是在64位服务器上,环境变量%processor_architecture%
正在返回x86
而不是AMD64
。
有没有人对此有任何线索?
答案 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%
来自:
答案 4 :(得分:3)
AMD64是一个基于 x86 架构的CPU品牌。更准确地说,x86-64,这是x86的64位扩展。
This也与bobince的答案有关。
此Knowledge Base article向您展示如何确定您的系统是32位还是64位
答案 5 :(得分:3)
方法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"
答案 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