Я пытаюсь получить переменную окружения, чтобы определить, является ли система 32 или 64 бит.
Но на 64-битном сервере переменная окружения %processor_architecture%
возвращает x86
вместо AMD64
.
Кто-нибудь знает об этом?
Я пытаюсь получить переменную окружения, чтобы определить, является ли система 32 или 64 бит.
Но на 64-битном сервере переменная окружения %processor_architecture%
возвращает x86
вместо AMD64
.
Кто-нибудь знает об этом?
Возможно, вы получаете неправильную переменную окружения. Если ваше приложение является 32-разрядным приложением, работающим в 64-разрядной ОС, версия процесса этой переменной среды вернет 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%
Вы также можете получить это из переменной среды, PROCESSOR_ARCHITEW6432
. См. эту статью для получения дополнительной информации.
Вы фактически используете 64-разрядную версию Windows? Если вы используете 32-битную Windows на 64-битном процессоре, вы все равно получите x86
.
Предположим, что 64-битный ПК с 64-битной установкой Windows.
%processor_architecture%
возвращает x86 только при получении значения в 32-битных программах. В 64-битных программах он корректно возвращает AMD64.
Пример: выполнить echo %processor_architecture%
из:
AMD64 - это марка процессора, основанная на архитектуре x86. x86-64, что является 64-битным расширением x86.
Это также относится к ответу bobince.
Эта статья базы знаний показывает, как определить, является ли ваша система 32-разрядной или 64-разрядной
Способ 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"
)
Способ 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"
источник: https://superuser.com/a/293143/249349
Я думаю, что причина этого заключается в том, что архитектура x86-64 должна позволять 32-разрядным программам рассматривать ее как идентичную (насколько это возможно) для 32-разрядной среды и следить за тем, чтобы 32 -битные программы не считают, что это только 64-разрядные (например, архитектура Itanium).
Это, однако, очень расстраивает людей, которым необходимо получить доступ к различиям между архитектурой x86-64 и 32-битной архитектурой в Windows.
Извинись за могилу. Однако переменная окружения архитектуры процессора доступна через powershell...
$env:PROCESSOR_ARCHITECTURE
Я нашел в своей системе 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