Имя пользователя:
Пароль:  
Помощь | Регистрация | Забыли пароль?  | Правила  

Компьютерный форум OSzone.net » Программирование, базы данных и автоматизация действий » Скриптовые языки администрирования Windows » CMD/BAT - [решено] Как проверить разрядность операционной системы?

Ответить
Настройки темы
CMD/BAT - [решено] Как проверить разрядность операционной системы?

Пользователь


Сообщения: 99
Благодарности: 4

Профиль | Отправить PM | Цитировать


Как проверить разрядность операционной системы?

У виндоуз 7 есть 2 версии: 64-х разрядная и 32-х разрядная.

Для 64-х разрядной нужно, чтобы выполнялись дополнительные программы. Как это сделать в коммандом файле?

Отправлено: 22:50, 08-04-2010

 

Ветеран


Сообщения: 27449
Благодарности: 8087

Профиль | Отправить PM | Цитировать


Цитата greg zakharov:
Iska, только вот кто в здравом уме станет запускать 32-битный командный шелл (из SysWOW64) в 64-битной ОС? »
Только здесь штук шесть таких за последний год было. Типичный пример — x86 Total Commander, любители репаков «всё-во-всём».

Цитата Andrey_Vladimirovich:
Правильно ли я понимаю, что она определяет только архитектуру CPU (меня в данном случает интересует только разрядность), а не разрядность ОС? »
Нет. Вот в этом случае:
Цитата Andrey_Vladimirovich:
но и на x64 железо может быть установлена x32 ОС. »
будет только %PROCESSOR_ARCHITECTURE%, и будет она содержать x86.

WOW64 Implementation Details - Win32 apps | Microsoft Docs
Detect 64 vs 32 bit OS or Process - Windows CMD - SS64.com
Это сообщение посчитали полезным следующие участники:

Отправлено: 05:58, 04-02-2021 | #71



Для отключения данного рекламного блока вам необходимо зарегистрироваться или войти с учетной записью социальной сети.

Если же вы забыли свой пароль на форуме, то воспользуйтесь данной ссылкой для восстановления пароля.


Пользователь


Сообщения: 122
Благодарности: 6

Профиль | Отправить PM | Цитировать


Забавно, зачем же разработчики так назвали переменную %PROCESSOR_ARCHITECTURE%, если её значение зависит от условий, в которых она запущена? Вот об это я изначально и споткнулся.
Это сообщение посчитали полезным следующие участники:

Отправлено: 07:12, 04-02-2021 | #72


Ветеран


Сообщения: 27449
Благодарности: 8087

Профиль | Отправить PM | Цитировать


Andrey_Vladimirovich, видимо решили, что она должна отражать состояние для окружения именно текущего процесса. А потом оставили, вероятно — чтобы не ломать совместимость. Изначально-то ни о каких x64 процессорах речь не шла — были Intel x86, MIPS, Alpha и PowerPC. И проверка была банальная (причём, я веду речь не только о пакетных файлах):
Код: Выделить весь код
IF %PROCESSOR_ARCHITECTURE% == x86 (…)
Теперь представьте, что меняется платформа, и под x64 запускается некое унаследованное приложение, в котором используется подобного рода проверка. И тут выбор — либо Вы оставляете для x86-процессов под x64-платформой те же значения переменных окружения и добавляете новую (PROCESSOR_ARCHITEW6432) — и всё унаследованное у Вас гладко и безболезненно продолжает работать, либо Вы кромсаете по живому — и теряете рынок.
Это сообщение посчитали полезным следующие участники:

Отправлено: 14:05, 05-02-2021 | #73


Пользователь


Сообщения: 122
Благодарности: 6

Профиль | Отправить PM | Цитировать


Iska
согласен, что оставили для совместимости. Но изначально было принято не правильное решение. Ведь само название переменной %PROCESSOR_ARCHITECTURE% говорит об архитектуре процессора, либо я не правильно понимаю, что имеется в виду под словом "PROCESSOR" в данном контексте. Поправьте меня, если я не прав. А если прав, то очевидно, что ОС никак не может влиять на процессор. Максимум, что может, так это изменить микропрограмму (если такая имеется) и то, это, например, изменит логику работы процессора, но не его разрядность. И если сходить по ссылке в сообщении 61 написанном greg zakharov, то, как он и указал, написано "The processor architecture of the installed operating system.". Правда, сам он почему-то сделал иной вывод из написанного. Я понимаю, что так сделал разработчик и понимать это нужно так, как это работает, но логики в этом нет. Либо я в упор чего-то не вижу и/или не понимаю.

Отправлено: 15:33, 05-02-2021 | #74


Аватара для DJ Mogarych

fascinating rhythm


Moderator


Сообщения: 6650
Благодарности: 1542

Профиль | Отправить PM | Цитировать


Andrey_Vladimirovich, видимо, это просто костыль с древних времён, который никто не будет уже менять. Не стоит искать в этом какую-то непогрешимую логику, надо просто принять это как данность.

-------
Powershell 7.x | Powershell 5.1 | ffmpeg (docs)

Это сообщение посчитали полезным следующие участники:

Отправлено: 20:06, 05-02-2021 | #75


Ветеран


Сообщения: 27449
Благодарности: 8087

Профиль | Отправить PM | Цитировать


Цитата Andrey_Vladimirovich:
Но изначально было принято не правильное решение. »
Andrey_Vladimirovich, ещё раз: изначально всё было правильным. Несоответствие возникло при переходе к x64-процессорам, потому что разработчики сделали правильный вывод — пусть лучше будет несоответствие, но приложения работают, нежели будет соответствие, но приложения перестанут работать.

Вот, например:
Код: Выделить весь код
…
# Determine the architecture we're running on.
# Define ARCH for our purposes;
# Define CPU for use by ntwin32.mak;
# Define CONFIG_H to the appropriate config.h for the system;
#
!ifdef PROCESSOR_ARCHITECTURE
# We're on Windows NT
CPU		= $(PROCESSOR_ARCHITECTURE)
CONFIG_H	= config.nt
OS_TYPE		= windowsnt
! if "$(PROCESSOR_ARCHITECTURE)" == "x86"
ARCH		= i386
CPU		= i386
! else
!  if "$(PROCESSOR_ARCHITECTURE)" == "MIPS"
ARCH		= mips
!  else
!   if "$(PROCESSOR_ARCHITECTURE)" == "ALPHA"
ARCH		= alpha
!   else
!    if "$(PROCESSOR_ARCHITECTURE)" == "PPC"
ARCH		= ppc
!    else
!     error Unknown architecture type "$(PROCESSOR_ARCHITECTURE)"
!    endif
!   endif
!  endif
! endif
!else
# We're on Windows 95
ARCH		= i386
CPU		= i386
CONFIG_H	= config.nt
OS_TYPE		= windows95
!endif
…
Это сообщение посчитали полезным следующие участники:

Отправлено: 20:40, 05-02-2021 | #76


Пользователь


Сообщения: 122
Благодарности: 6

Профиль | Отправить PM | Цитировать


Цитата Iska:
Andrey_Vladimirovich, ещё раз: изначально всё было правильным. »
Нет, просто изначально это не создавало проблем с точки зрения логики (правильнее сказать, таких проблем).

Отправлено: 03:20, 06-02-2021 | #77


Ветеран


Сообщения: 27449
Благодарности: 8087

Профиль | Отправить PM | Цитировать


Andrey_Vladimirovich, нет. Вы никак не поймёте — изначально эта переменная окружения и показывала именно архитектуру процессора. Я же Вам даже образец реального кода тех времён привёл.
Это сообщение посчитали полезным следующие участники:

Отправлено: 06:38, 06-02-2021 | #78


Пользователь


Сообщения: 122
Благодарности: 6

Профиль | Отправить PM | Цитировать


Iska
то, что эта переменная изначально имела отношение к железу, тут у меня вопросов нет. То есть, изначально эта переменная предназначалась исключительно для определения архитектуры CPU (т.е. железа) и вопроса в определении разрядности (как CPU, так и ОС) не стояло, т.к. все были x32. А потом, с появлением x64 решили, что называется "перегрузить" переменную и использовать её, в добавок с другой, в определении разрядности, как ОС, так и запущенного процесса. Так?

Отправлено: 07:14, 06-02-2021 | #79


Ветеран


Сообщения: 27449
Благодарности: 8087

Профиль | Отправить PM | Цитировать


Цитата Andrey_Vladimirovich:
изначально эта переменная предназначалась исключительно для определения архитектуры CPU (т.е. железа) и вопроса в определении разрядности (как CPU, так и ОС) не стояло, т.к. все были x32. »
Так.

Цитата Andrey_Vladimirovich:
А потом, с появлением x64 решили, что называется "перегрузить" переменную и использовать её, в добавок с другой, в определении разрядности, как ОС, так и запущенного процесса. Так? »
Нет. Никто не предназначал её для определения разрядности ОС, ни изначально, ни потом. Значение x86 оставили в этой переменной окружения в случае исполнения x86-процессов под x64 ОС именно для совместимости, чтобы работали унаследованные приложения. А для возможности определения данного факта не для унаследованных, а современных приложений, добавили для этого случая новую переменную окружения — PROCESSOR_ARCHITEW6432.

То, что мы используем эти две переменные окружения для определения разрядности ОС — просто побочный эффект, который работает по вышеизложенной причине (и потому, что на пользовательском уровне не встретишь ни IA, ни ARM).

Последний раз редактировалось Iska, 06-02-2021 в 13:51. Причина: Лишняя запятая

Это сообщение посчитали полезным следующие участники:

Отправлено: 08:22, 06-02-2021 | #80



Компьютерный форум OSzone.net » Программирование, базы данных и автоматизация действий » Скриптовые языки администрирования Windows » CMD/BAT - [решено] Как проверить разрядность операционной системы?

Участник сейчас на форуме Участник сейчас на форуме Участник вне форума Участник вне форума Автор темы Автор темы Шапка темы Сообщение прикреплено

Похожие темы
Название темы Автор Информация о форуме Ответов Последнее сообщение
Разное - [решено] Как убрать меню выбора операционной системы? trimo Microsoft Windows 2000/XP 84 26-01-2010 21:57
Вопрос - Как можно проверить был взлом системы или просто зашли под другим пользователем? ИС_ Защита компьютерных систем 0 24-09-2009 16:52
как узнать разрядность системы DIMON171 Хочу все знать 20 28-06-2008 19:57
Как убрать меню выбора операционной системы Guest Microsoft Windows 95/98/Me (архив) 1 10-09-2004 14:11
Разрядность операционной системы ankerok Хочу все знать 7 09-01-2003 16:45




 
Переход