Why %processor_architecture% always returns x86 instead of AMD64
Asked Answered
C

9

34

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?

Choi answered 15/11, 2009 at 21:54 Comment(3)
bash tag? I'm assuming this is just for windows. What version are you running?Foliage
Guys i think it was the problem that MCG and bobince suggested.Choi
I'm having a similar issue with Jenkins. My session is running from a CMD.exe console that is in C:\Windows\SYSWOW64 and still no luck, but if the JVM is being set to x86, then that... could get tricky...Silent
P
56

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%
Pathetic answered 15/11, 2009 at 22:15 Comment(3)
I just tried this and it is working. Thanks so much for your help.Choi
Thankyou. I just ran into this problem. MS - what a bunch of brain surgeons. A variable which tells you the target platform of the currently executing binary. Fish, bicycle, usefulness of to, etbloodycetra.Boart
perfect, I am launching my batch file from 32-bit version exe in 64-bit architecture hence get into the same problem.Sarong
D
11

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

Degrade answered 16/11, 2009 at 11:47 Comment(3)
More information about the same stuff: msdn.microsoft.com/en-us/library/aa384274(VS.85).aspxArchil
Not on Win10 :/Silent
Good explanation here web.archive.org/web/20231127170221/https://ss64.com/nt/… OP has dead link, the one from Microsoft doesn't provide a clear explanationUnruffled
H
9

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.

Hellman answered 15/11, 2009 at 22:7 Comment(1)
I am actually running 64 bit version. I can see that from the My COmputer properties.Choi
G
6

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
Graham answered 22/1, 2013 at 9:41 Comment(3)
What's this 64-bit Explorer you speak of? Can you provide a link?Zircon
@bigp, it is the built-in file manager a.k.a Windows Explorer (explorer.exe). Running on 64bit Windows installation, this guy is 64bit program.Graham
That was the answer for me, normal windows console was 64-bit, but starting via total-commander showed x86 thx for solving my problemDogfight
M
4

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

Manville answered 15/9, 2014 at 10:4 Comment(1)
for your method 1 to work for me on Win8.1 the test of Arch must be quoted so if "%Arch%" == "x64"Pew
F
3

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

Foliage answered 15/11, 2009 at 22:0 Comment(1)
So Is there anyway to find out whether the system is 64 or 32 using batch file.Choi
L
1

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.

Luciolucita answered 19/10, 2012 at 18:9 Comment(0)
R
1

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
Roomy answered 14/3, 2014 at 19:50 Comment(0)
T
1

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

$env:PROCESSOR_ARCHITECTURE
Taratarabar answered 17/10, 2014 at 17:50 Comment(0)

© 2022 - 2024 — McMap. All rights reserved.