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?
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?
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_MACHINESystemCurrentControlSetControlSession ManagerEnvironmentPROCESSOR_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 "HKLMSystemCurrentControlSetControlSession ManagerEnvironment" /v PROCESSOR_ARCHITECTURE
There is even a more simple solution using cmd
:
ECHO %PROCESSOR_ARCHITECTURE%
You can also get this from an environment variable, PROCESSOR_ARCHITEW6432
. See this article for more info.
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
.
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:
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
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 "HKLMHardwareDescriptionSystemCentralProcessor " | find /i "x32" > NUL && set OS=32BIT || set OS=64BIT
if %OS%==32BIT echo "YESSS"
if %OS%==64BIT echo "NOOO"
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.
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
Apologize for the grave dig. However, the processor architecture environmental variable is accessible via powershell ...
$env:PROCESSOR_ARCHITECTURE
I am trying to find out the difference between difference service account types. I tumbled upon this question. The answer was because it has powerful access to local resources, and Network Service ...
Does anyone know how to programatically detect that a Windows server is part of a cluster? Further, is it possible to detect that the server is the active or passive node? [Edit] And detect it from ...
I ve read Get File Icon used by Shell and the other similar posts - and already use SHFileInfo to get the associated icon for any given extension, and that works great. However, Outlook uses ".msg" ...
How can I create an empty file at the DOS/Windows command-line? I tried: copy nul > file.txt But it always displays that a file was copied. Is there another method in the standard cmd? It should ...
I know about the GetLastInputInfo method but that would only give me the duration since last user input - keyboard or mouse. If a user input was last received 10 minutes ago, that wouldn t mean the ...
My application creates a thread and that runs in the background all the time. I can only terminate the thread manually, not from within the thread callback function. At the moment I am using ...
Yes, I know, the archive bit is evil. That being said, is there support for querying it with find , and modifying it with chmod ? My googling has turned up nothing......
I built a Java application that is delivered on USB sticks. To ensure compatibility, I ship an appropriate JVM on the sticks. I made an EXE that simply invokes this JVM with the application jar. Now ...