Почему% processor_architecture% всегда возвращает x86 вместо AMD64 - PullRequest
27 голосов
/ 16 ноября 2009

Я пытаюсь получить переменную среды, чтобы определить, является ли система 32- или 64-разрядной. Но на 64-битном сервере переменная среды %processor_architecture% возвращает x86 вместо AMD64.

Кто-нибудь знает об этом?

Ответы [ 9 ]

49 голосов
/ 16 ноября 2009

Возможно, вы получаете неверную переменную окружения. Если ваше приложение является 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%
10 голосов
/ 16 ноября 2009

Вы также можете получить это из переменной окружения, PROCESSOR_ARCHITEW6432. См. эту статью для получения дополнительной информации.

8 голосов
/ 16 ноября 2009

Вы на самом деле используете 64-разрядную версию Windows? Если вы используете 32-битную Windows на 64-битном процессоре, вы все равно получите x86.

4 голосов
/ 22 января 2013

Предполагается 64-битный ПК с 64-битной установкой Windows.

%processor_architecture% возвращает x86 только при получении значения в 32-битных программах. В 64-битных программах он возвращает корректно AMD64 .

Пример: выполнить echo %processor_architecture% из:

  • 32bit Total Commander
  • 64-битный Explorer
3 голосов
/ 15 сентября 2014

НАИБОЛЕЕ НАДЕЖНОЕ РЕШЕНИЕ:

Метод 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

3 голосов
/ 16 ноября 2009

AMD64 - это торговая марка процессора, основанная на архитектуре x86 . x86-64 , точнее, 64-битное расширение x86.

Это также относится к ответу Бобинса.

В этой статье базы знаний показано, как определить, является ли ваша система 32-разрядной или 64-разрядной

1 голос
/ 17 октября 2014

Прошу прощения за могилу. Однако переменная среды архитектуры процессора доступна через powershell ...

$env:PROCESSOR_ARCHITECTURE
1 голос
/ 19 октября 2012

Я думаю, что отчасти причина этого в том, что архитектура x86-64 должна позволять 32-битным программам обрабатывать ее как идентичную (насколько это возможно) 32-битной среде и обеспечивать, чтобы 32 -битные программы не думают, что это только 64-битные (как архитектура Itanium).

Однако это очень расстраивает людей, которым необходим доступ к различиям между архитектурой x86-64 и 32-битной архитектурой в Windows.

0 голосов
/ 14 марта 2014

Я нашел в своей системе 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
...