Why %processor_architecture% always returns x86 instead of AMD64
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%
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:
- 32bit Total Commander
- 64bit Explorer