Как указать путь установки MSI-файлу в cmd?

На работе понадобилось установить программулю в конкретную директорию, т.к. локальные админы не будут иметь доступ к папке Program Files. Устанавливается автоматически через Ansible, поэтому надо было прописать какой-то аргумент для этого.

Вкратце, MSI-установщик — это база данных со своей внутренней файловой системой, и каждый генератор установщик делает эту базу данных по-своему. Поэтому под каждый генератор установщиков будет своё имя переменной. Тем не менее, вот список частых имён этих переменных:

  • APPDIR (напр. для Advanced Installer)
  • TARGETDIR
  • INSTALLDIR
  • INSTALLFOLDER
  • INSTALLLOCATION
  • APPLICATIONFOLDER

Но лучше сразу запустить установщик и поискать название генератора. Оно может быть написано здесь:

После следует погуглить, как указать папку для установки для конкретного генератора. Обычно имена эти совпадают с именами при создании самих установщиков, и документация к генераторам должна помочь. В моём случае был APPDIR. Т.е. для запуска MSI с этим параметром понадобится следующая команда:

msiexec /i "C:\PackageSource\Setup.msi" APPDIR="C:\PackageName\" /qb

Для Ansible получается код вида:

- name: Install the package
  win_package:
    path: C:\PackageSource\Setup.msi
    arguments: APPDIR=""

Здесь у меня {{installDir}} — переменная, например C:\PackageName\. Кавычки вокруг переменной фиксят проблемы с пробелами в путях к файлам.