CMD/BAT - [решено] Как проверить разрядность операционной системы?
-
SvoiLudi
CMD/BAT - [решено] Как проверить разрядность операционной системы?
Как проверить разрядность операционной системы?
У виндоуз 7 есть 2 версии: 64-х разрядная и 32-х разрядная.
Для 64-х разрядной нужно, чтобы выполнялись дополнительные программы. Как это сделать в коммандом файле?
У виндоуз 7 есть 2 версии: 64-х разрядная и 32-х разрядная.
Для 64-х разрядной нужно, чтобы выполнялись дополнительные программы. Как это сделать в коммандом файле?
-
SvoiLudi
Re: CMD/BAT - [решено] Как проверить разрядность операционной системы?
в реестре ветки добавляются у 64-х, но как проверить?
-
SvoiLudi
Re: CMD/BAT - [решено] Как проверить разрядность операционной системы?
День добрый! Подскажите как на основе выше приведенного примера запустить программу driver install.ехе исходя из розрядности из папки х86 или х64?
-
SvoiLudi
Re: CMD/BAT - [решено] Как проверить разрядность операционной системы?
Цитата Andrey_Vladimirovich:
Например, в моей Win 10 x64 переменная "PROCESSOR_ARCHITECTURE" имеет значение "AMD64", а "PROCESSOR_ARCHITEW6432" не определена.
Позвольте вам объяснить причину не с точки зрения кофейной гущи, а - кода Windows. Переменная окружения PROCESSOR_ARCHITECTURE - это значение поля wProcessorArchitecture структуры
Цитата docs.microsoft.com:
The processor architecture of the installed operating system.
Таким образом, если 32-битная система работает на базе процессора x64 архитектуры, значение переменной будет x86 (или 0), а потому прочие проверки в общем излишни. SYSTEM_INFO формируется на основе различных системных данных, в частности значение wProcessorArchitecture является значением поля NativeProcessorArchitecture структуры KUSER_SHARED_DATA (смещение 0x26A). Таким образом, однозначно идентифицировать битность системы можно в pwsh так:
Код:
9 - x64, 0 - x86 и т.д.
Что касается ещё более низкого уровня - лучше смотреть в сторону сегментных регистров.
Например, в моей Win 10 x64 переменная "PROCESSOR_ARCHITECTURE" имеет значение "AMD64", а "PROCESSOR_ARCHITEW6432" не определена.
Позвольте вам объяснить причину не с точки зрения кофейной гущи, а - кода Windows. Переменная окружения PROCESSOR_ARCHITECTURE - это значение поля wProcessorArchitecture структуры
SYSTEM_INFO
. Перейдя по ссылке, вы прочтёте следующее:Цитата docs.microsoft.com:
The processor architecture of the installed operating system.
Таким образом, если 32-битная система работает на базе процессора x64 архитектуры, значение переменной будет x86 (или 0), а потому прочие проверки в общем излишни. SYSTEM_INFO формируется на основе различных системных данных, в частности значение wProcessorArchitecture является значением поля NativeProcessorArchitecture структуры KUSER_SHARED_DATA (смещение 0x26A). Таким образом, однозначно идентифицировать битность системы можно в pwsh так:
Код:
Код: Выделить всё
[Runtime.InteropServices.Marshal]::ReadInt16([IntPtr]0x7FFE026A)9 - x64, 0 - x86 и т.д.
Что касается ещё более низкого уровня - лучше смотреть в сторону сегментных регистров.
-
SvoiLudi
Re: CMD/BAT - [решено] Как проверить разрядность операционной системы?
PATH %PATH%;q:;w:;e:;r:;t:;y:;u:;i:;o:;p:;a:;s:;d:;f:;g:;h:;j:;k:;l:;z:\;x:;c:;v:;b:;n:;m:;
"%WINDIR%\regedit.exe" /s 32x.reg
Set xOS=x86
If Defined PROCESSOR_ARCHITEW6432 (Set xOS=x64) Else If "%PROCESSOR_ARCHITECTURE%"=="AMD64" Set xOS=x64
if "%xOS%"=="x64" "%WINDIR%\regedit.exe" /s 64x.reg
в реестр ничего не добавляет, а если убрать /s то предлагает добавить в реестр, что требует действия пользователя, что неудобно. Как убрать запрос?
64x.reg находится на сетевом диске z:\
"%WINDIR%\regedit.exe" /s 32x.reg
Set xOS=x86
If Defined PROCESSOR_ARCHITEW6432 (Set xOS=x64) Else If "%PROCESSOR_ARCHITECTURE%"=="AMD64" Set xOS=x64
if "%xOS%"=="x64" "%WINDIR%\regedit.exe" /s 64x.reg
в реестр ничего не добавляет, а если убрать /s то предлагает добавить в реестр, что требует действия пользователя, что неудобно. Как убрать запрос?
64x.reg находится на сетевом диске z:\
-
SvoiLudi
Re: CMD/BAT - [решено] Как проверить разрядность операционной системы?
SvoiLudi, на форуме
Цитата:
темы организуются по
На Ваш вопрос в заголовке темы ответ уже дан, для нового вопроса откройте новую тему и постарайтесь его правильно сформулировать, примерно так: "Как на 64-разрядной системе внести данные из reg файла, находящегося на сетевом диске z:\, в реестр с помощью bat файла запущенного (откуда? с правами администратора?) в 32 (64)-разрядной среде? Reg файл прикрепил."
Цитата:
темы организуются по
принципу
''одна проблема – одна тема''.На Ваш вопрос в заголовке темы ответ уже дан, для нового вопроса откройте новую тему и постарайтесь его правильно сформулировать, примерно так: "Как на 64-разрядной системе внести данные из reg файла, находящегося на сетевом диске z:\, в реестр с помощью bat файла запущенного (откуда? с правами администратора?) в 32 (64)-разрядной среде? Reg файл прикрепил."
-
Elven
Re: CMD/BAT - [решено] Как проверить разрядность операционной системы?
Извините, если не в тему, но не получается корректно обработать запуск программы в зависимости от разрядности системы
Пример:
PHP код:
Задача: создать почти универсальный установочный bat-файл. Менять только значение переменных в самом начале
В данном скрипте почему-то съедается скобка в пути у Programm Files (x86
Пример:
PHP код:
Код: Выделить всё
@ECHO OFF
SET ProgName=WinRar
SET ProgVer=4.20 Beta 3
SET FileNameX86=wrar420b3ru.exe
SET FileNameX64=winrar-x64-420b3ru.exe
SET FileName=
SET PFPath=
TITLE %ProgName% %ProgVer%
CLS
COLOR 1A
IF EXIST "%ProgramFiles(x86)%" (
IF DEFINED FileNameX64 (
SET FileName=%FileNameX64%
SET PFPath=%PROGRAMFILES%
) ELSE (
SET FileName=%FileNameX86%
SET PFPath=%PROGRAMFILES(x86)%
)
) ELSE (
SET FileName=%FileNameX86%
SET PFPath=%PROGRAMFILES%
)
ECHO Импорт настроек
ECHO.
regedit /S Settings.reg
ECHO.
START /WAIT %FileName% /S
ECHO Установка завершена
ECHO.
Задача: создать почти универсальный установочный bat-файл. Менять только значение переменных в самом начале
В данном скрипте почему-то съедается скобка в пути у Programm Files (x86
-
gora
Re: CMD/BAT - [решено] Как проверить разрядность операционной системы?
Цитата vcrank:
почему-то съедается скобка в пути у Programm Files (x86
Попробуйте так:
Код:
почему-то съедается скобка в пути у Programm Files (x86
CMD/BAT - [решено] Как проверить разрядность операционной системы?
Попробуйте так:
Код:
Код: Выделить всё
@ECHO OFF
SET ProgName=WinRar
SET ProgVer=4.20 Beta 3
SET FileNameX86=wrar420b3ru.exe
SET FileNameX64=winrar-x64-420b3ru.exe
SET FileName=
SET PFPath=
TITLE %ProgName% %ProgVer%
CLS
COLOR 1A
Set xOS=x86
If Defined PROCESSOR_ARCHITEW6432 (Set xOS=x64) Else If "%PROCESSOR_ARCHITECTURE%"=="AMD64" Set xOS=x64
SET FileName=%FileNameX86%
SET PFPath=%PROGRAMFILES(x86)%
IF %xOS%==x64 (
IF DEFINED FileNameX64 (
SET FileName=%FileNameX64%
SET PFPath=%PROGRAMFILES%
)
) ELSE (
SET FileName=%FileNameX86%
SET PFPath=%PROGRAMFILES%
)
ECHO PFPath=%PFPath%
ECHO FileName=%FileName%
Pause-
seriych
Re: CMD/BAT - [решено] Как проверить разрядность операционной системы?
Цитата gora:
Попробуйте так:
На системе X86 выдёт
всё как и положено, а вот на x64
Выдёт всё равно путь и имя файла как для системы x86 (Program Files (x86) и wrar420b3ru.exe)
Такое ощущение, что условие ELSE срабатывает в любом случае
Пока делаю костыль с добавлением GoTo
Попробуйте так:
CMD/BAT - [решено] Как проверить разрядность операционной системы?
На системе X86 выдёт
всё как и положено, а вот на x64
Выдёт всё равно путь и имя файла как для системы x86 (Program Files (x86) и wrar420b3ru.exe)
Такое ощущение, что условие ELSE срабатывает в любом случае
Пока делаю костыль с добавлением GoTo
-
SvoiLudi
Re: CMD/BAT - [решено] Как проверить разрядность операционной системы?
PATH %PATH%;q:;w:;e:;r:;t:;y:;u:;i:;o:;p:;a:;s:;d:;f:;g:;h:;j:;k:;l:;z:\;x:;c:;v:;b:;n:;m:;
"%WINDIR%\regedit.exe" /s 32x.reg
Set xOS=x86
If Defined PROCESSOR_ARCHITEW6432 (Set xOS=x64) Else If "%PROCESSOR_ARCHITECTURE%"=="AMD64" Set xOS=x64
if "%xOS%"=="x64" "%WINDIR%\regedit.exe" /s 64x.reg
в реестр ничего не добавляет, а если убрать /s то предлагает добавить в реестр, что требует действия пользователя, что неудобно. Как убрать запрос?
64x.reg находится на сетевом диске z:\
"%WINDIR%\regedit.exe" /s 32x.reg
Set xOS=x86
If Defined PROCESSOR_ARCHITEW6432 (Set xOS=x64) Else If "%PROCESSOR_ARCHITECTURE%"=="AMD64" Set xOS=x64
if "%xOS%"=="x64" "%WINDIR%\regedit.exe" /s 64x.reg
в реестр ничего не добавляет, а если убрать /s то предлагает добавить в реестр, что требует действия пользователя, что неудобно. Как убрать запрос?
64x.reg находится на сетевом диске z:\