Изначально эта статья задумывалась как приложение к руководству по созданию аддонов. Однако область, которую она затрагивает, оказалась более широка. Речь в статье пойдет об использовании msiexec.exe в различных средствах автоматизации задач – скриптах и комментариях архивов (которые, по сути, также являются скриптами).
Параметры командной строки msiexec
На написание этой статьи меня подтолкнула возникшая у меня проблема с автоматизацией создания административной точки аддоном-конструктором ACDSee. Этот конструктор позволяет создавать из дистрибутивов ACDSee разных версий аддоны для установки вместе с Windows, а также автоматическую установку на рабочую систему. Причем создание производится как из обычного дистрибутива, так и из административной установки. Основа этого конструктора - файлы MSI и сценарии установки MST. В аддоне и при автоматической установке эта связка запускается командой вида
msiexec.exe /i acdsee.msi /qn TRANSFORMS=unattend.mst
Аналогичный подход я использовал и для создания точки административной установки пакета ACDSee в нужной мне папке. Задав путь к папке в файле преобразования (MST), я создавал административную точку командой
msiexec.exe /a ACDSee9.msi TRANSFORMS=admin.mst
Ключи /a, /i и /qn – документированы в справке msiexec (краткий рассказ о ключах тихой установки есть здесь), а вот ключ TRANSFORMS в ней не описан, и его отличие от ключей msiexec.exe видно даже из синтаксиса.
Заинтересовавшись ключами установщика Windows, я подумал, нет ли среди них такого, с помощью которого можно было бы обойтись без MST-файла, указывая в командной строке собственный путь для создания точки административной установки. И такой ключ нашелся – TARGETDIR!
msiexec.exe /a ACDSee9.msi TARGETDIR="%~dp0\adm\ACDSee9"
Свойства установщика Windows
Как это все работает, и откуда взялись ключи TRANSFORMS, TARGETDIR и другие, не указанные в справке командной строки msiexec.exe? Данные ключи – это не параметры командной строки msiexec.exe, а свойства установщика Windows, в оригинале называемые Properties. Все свойства перечислены в документации (англ.), размещенной на MSDN.
Свойства делятся на:
Полный список свойств размещен на этой странице.
- Публичные свойства установочного пакета могут изменяться пользователем или системным администратором в командной строке, посредством MST- файла, либо интерактивно во время установки. Используя список свойств, можно легко определить, является ли свойство публичным – их названия состоят только из заглавных букв, т. е. не содержат строчных.
- Ограниченно публичные свойства могут применяться автором пакета для того, чтобы ограничить список свойств, которые может изменить пользователь, не имеющий прав администратора. Если автор пакета не задал ограничений, обычный пользователь сможет изменить стандартный список свойств - в него входят, например, ALLUSERS, TRANSFORMS, REBOOT.
- Обязательные свойства должны присутствовать в каждом установочном пакете.
- Частные свойства задаются исключительно автором пакета. С помощью командной строки их невозможно изменить – этого можно добиться только редактированием пакета
Публичные и ограниченно публичные свойства наиболее интересны для автоматизации, поскольку только их можно изменять с помощью командной строки в большинстве пакетов установки.
Приоритеты определения свойств
Одно из преимуществ использования командной строки заключается в более высоком приоритете вносимых ей изменений. Приоритеты при изменении свойств в процессе установки пакета таковы:
- Переменные среды
- Командная строка
- Административная установка (AdminProperties)
- Файл преобразований MST
- Установочный пакет MSI
Как видите, приоритет над командной строкой имеют только переменные окружения. Из этого же списка видно еще одно преимущество использования командной строки – переопределение или добавление изменений, сделанных в MST- файле.
Восстановление установочного пакета.
Если в командной строке вы используете ключ '/f ' для восстановления установленного пакета, помните, что в этом случае все свойства (Properties) игнорируются !
Передача свойств установочным пакетам
Файлы пакетов обновлений (MSP) также обрабатываются msiexec.exe, и это позволяет применять к MSI- пакету допустимые свойства наряду с обновлениями.
Чтобы применить обновление к установочному административному пакету, используйте следующую команду:
Msiexec.exe /pUpdate.msp /aExample.msi СВОЙСТВА
Обычно, установочные MSI-пакеты распространяются запакованными в EXE- файл. Как правило, им можно передавать публичные свойства, однако делать это, в отличие от msiexec.exe, надо немного по-другому:
ACDSee.exe /s /v”TRANSFORMS=unatend.mst /qn”
Поскольку файл исполняемый, вызывать msiexec.exe нет необходимости. Далее идет необязательный ключ /s - аналог ключа /qn для «тихой» установки. Этот ключ дает команду не показывать предварительные окна установщика Windows (ключ /qn служит тем же целям в MSI- пакете). И, наконец, нужный нам ключ /v как раз служит для передачи аргументов в MSI- пакет. В кавычках по порядку указываются аргументы. После ключа не должно быть пробелов.
Зачастую авторы установочных пакетов MSI пакуют их в EXE- файлы сторонними установщиками либо умышленно ограничивают количество свойств, которые можно передать пакету. В таком случае в командной строке придется использовать распакованный MSI-пакет.
Примеры использования свойств
Упомянутую в начале статьи проблему с автоматизацией создания административной точки я решил именно с помощью свойств установщика Windows. Обдумав написанный мной BAT- файл с использованием свойств для указания папки установки административной точки, я понял, что это довольно удобно - предавать ключи в командной строке напрямую msiexec.exe, не используя сценарии MST, которые нельзя отредактировать без специальных программ. Зато строку с TARGETDIR= можно отредактировать в любом текстовом редакторе (архиваторе), настроив путь установки приложения как душе пользователя или администратора угодно.
TARGETDIR=[путь]
Определяет папку установки приложения. Также, в административной установке он позволяет определить папку сетевого расположения (место создания административной точки).
msiexec.exe /a ACDSee9.msi TARGETDIR="%~dp0\adm\ACDSee9"
ALLUSERS=[1|2|””]
Определяет установку приложения для одного (текущего) пользователя или для всех пользователей. По умолчанию Windows Installer устанавливает приложение для всех пользователей компьютера. Если для свойства ALLUSERS задано значение 1, пакет установится для всех пользователей компьютера, если задано значение 2 – оно сбросится на нулевое значение (""), и приложение будет установлено для текущего пользователя.
- 1 - установка для всех пользователей компьютера; необходимы привилегии администратора.
- 2 - установка только для пользователя, выполняющего программу установки.
- "" - установка только для пользователя, выполняющего программу установки.
msiexec.exe /i ACDSee9.msi ALLUSERS=””
USERNAME=[строка]
Указание имени пользователя по умолчанию.
COMPANYNAME=[строка]
Указание названия организации.
msiexec.exe /i ACDSee9.msi USERNAME=”Иван” COMPANYNAME=”Наш офис”
Примечание. У последних двух свойств есть антиподы: NOUSERNAME и NOCOMPANYNAME. Системный администратор может использовать эти свойства при автоматической установке приложений. Если для этих свойств при установке задано значение 1, приложение при первом запуске запросит имя пользователя и название организации.
PIDKEY=[строка]
Ввод 25-символьного лицензионного ключа в командной строке программы установки или в файле параметров настройки программы установки. Если задано свойство PIDKEY, от пользователей не требуется ввозить ключ продукта при установке приложения.
msiexec.exe /i ACDSee9.msi PIDKEY=12345-678901-23456-7890-12345
Посмотреть формат ввода ключа можно в другом свойстве PIDTemplate.
REBOOT=[строка]
- Force - принудительная перезагрузка
- Suppress - отложенная перезагрузка
- ReallySuppress – без перезагрузки
msiexec.exe /i ACDSee9.msi REBOOT= ReallySuppress
Ссылки
------------------------------------
v1.1-18.04.2009 - добавлен абзац про восстановление пакета