我正在尝试检索环境变量来检测系统是32位还是64位。 但在 64 位服务器上,环境变量
%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%
您实际上运行的是 64 位版本的 Windows 吗?如果您在支持 64 位的 CPU 上运行 32 位 Windows,您仍然会得到
x86
。
假设 64 位 PC 安装了 64 位 Windows。
仅当在 32 位程序中获取值时,%processor_architecture%
才返回 x86。在 64 位程序中,它正确返回 AMD64。
示例:从以下位置执行
echo %processor_architecture%
:
方法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"
)
方法二:
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"
我认为这种方式的部分原因是 x86-64 架构必须允许 32 位程序将其视为与 32 位环境相同(尽可能),并确保 32 位程序并不认为它只是 64 位(如 Itanium 架构)。
然而,这对于需要了解 Windows 上 x86-64 架构与 32 位架构之间差异的人们来说非常令人沮丧。
我在我的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
为挖坟道歉。然而,处理器架构环境变量可以通过powershell访问...
$env:PROCESSOR_ARCHITECTURE
您是否一直在努力推广您的业务?不确定哪个数字营销机构适合您?需要一些问责支持来让您的业务步入正轨吗?我们来到了 Digital Marketing Agency Online,这里有 SEO 专家团队。推动销售是我们在广告、Facebook 和 Instagram 广告、内容营销、文案、视频营销和开发、电子商务以及网站设计和开发方面所做的工作。