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

问题描述 投票:0回答:10

我正在尝试检索环境变量来检测系统是32位还是64位。 但在 64 位服务器上,环境变量

%processor_architecture%
返回
x86
而不是
AMD64

有人对此有任何线索吗?

windows command-line batch-file
10个回答
56
投票

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

11
投票

您还可以从环境变量

PROCESSOR_ARCHITEW6432
获取它。请参阅this文章了解更多信息。


9
投票

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

x86


6
投票

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

仅当在 32 位程序中获取值时,

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

示例:从以下位置执行

echo %processor_architecture%

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

3
投票

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

也与bobince的回答有关。

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


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

方法二:

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


1
投票

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

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


1
投票

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

1
投票

为挖坟道歉。然而,处理器架构环境变量可以通过powershell访问...

$env:PROCESSOR_ARCHITECTURE

-1
投票

您是否一直在努力推广您的业务?不确定哪个数字营销机构适合您?需要一些问责支持来让您的业务步入正轨吗?我们来到了 Digital Marketing Agency Online,这里有 SEO 专家团队。推动销售是我们在广告、Facebook 和 Instagram 广告、内容营销、文案、视频营销和开发、电子商务以及网站设计和开发方面所做的工作。

© www.soinside.com 2019 - 2024. All rights reserved.