Why %processor_architecture% always returns x86 instead of AMD64

大憨熊 提交于 2019-11-26 10:50:47

问题


I am trying to retrieve the environment variable to detect whether the system is 32 or 64 bit. But on 64 bit server the environment variable %processor_architecture% is returning x86 instead of AMD64.

Does anyone has any clue about this?


回答1:


You may be getting the wrong environment variable. If your application is a 32-bit application running on a 64-bit OS the process version of this environment variable will return x86. If you want to find the architecture of the machine, you can grab it from the following registry entry:

HKEY_LOCAL_MACHINE\System\CurrentControlSet\Control\Session Manager\Environment\PROCESSOR_ARCHITECTURE

Or if you're using .NET, then you can use this call to get it:

string arch = System.Environment.GetEnvironmentVariable("PROCESSOR_ARCHITECTURE", 
    EnvironmentVariableTarget.Machine);

From the command line you can try this:

reg query "HKLM\System\CurrentControlSet\Control\Session Manager\Environment" /v PROCESSOR_ARCHITECTURE

There is even a more simple solution using cmd:

ECHO %PROCESSOR_ARCHITECTURE%



回答2:


You can also get this from an environment variable, PROCESSOR_ARCHITEW6432. See this article for more info.




回答3:


Are you actually running a 64-bit version of Windows? If you are running 32-bit Windows on a 64-bit-capable CPU, you will still get x86.




回答4:


Assuming 64bit PC with 64bit Windows installation.

%processor_architecture% returns x86 only when getting the value in 32bit programs. In 64bit programs it returns correctly AMD64.

Example: execute echo %processor_architecture% from:

  • 32bit Total Commander
  • 64bit Explorer



回答5:


AMD64 is a brand of CPU which is based on the x86 architecture. x86-64 more precisely, which is the 64-bit extension of x86.

This also relates to bobince's answer.

This Knowledge Base article shows you how to determine if your system is 32-bit or 64-bit




回答6:


MOST RELIABLE SOLUTION:

Method 1:
(Two step Validation with PROCESSOR_ARCHITECTURE and 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"
)

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

source: https://superuser.com/a/293143/249349




回答7:


I think part of the reason it is like this way is that the x86-64 architecture has to allow 32-bit programs to treat it as identical (as far as possible) to a 32-bit environment and make sure that 32-bit programs do not think it is 64-bit only (like the Itanium architecture).

This however makes it very frustrating to people who need to access the differences between the x86-64 architecture vs 32 bit architecture on Windows.




回答8:


Apologize for the grave dig. However, the processor architecture environmental variable is accessible via powershell ...

$env:PROCESSOR_ARCHITECTURE



回答9:


I found on my Win7HB x64 system:

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


来源:https://stackoverflow.com/questions/1738985/why-processor-architecture-always-returns-x86-instead-of-amd64

易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!