Заметки · 05.06.2022

Батник с соблюдением битности

Задача: необходимо, автоматизировать запуск программы с соблюдением разрядности операционной системы. Иными словами, чтобы на компьютере под управлением 64-битной операционной системы запускался exe (x64), а на 32-битной соответственно — exe (x86).

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

Для эксперимента я взял установочные msi-пакеты архиватора 7-zip, разместил их на общем сетевом ресурсе и соорудил команды для установщика Windows:

msiexec /i "//ip/distrib/7z-x86.msi" /qn
msiexec /i "//ip/distrib/7z-x64.msi" /qn

С параметрами программы msiexec можно ознакомиться здесь.

Осталось заключить команды в условия bat-скрипта для установки с соблюдением разрядности операционной системы:

set "osX=%PROCESSOR_ARCHITECTURE%"
if defined PROCESSOR_ARCHITEW6432 set "osX=AMD64"
if "%osX%"=="x86" (
	start /wait msiexec /i "//ip/distrib/7z-x86.msi" /qn
) else (
	start /wait msiexec /i "//ip/distrib/7z-x64.msi" /qn
)
exit /b

Работа скрипта может обеспечиваться на уровне групповых политик при запуске компьютера в домене. Главное в работе данного батника — убедиться, чтобы исполняемые файлы были доступны.

Кстати, в PowerShell условие на проверку разрядности целевой операционной системы выглядит вот так:

if ((Get-WmiObject win32_operatingsystem | select osarchitecture).osarchitecture -like "64*") { #x64 }
else { #x86 }