Установщик MSI вызывает другой установщик MSI в автоматическом режиме с помощью WiX

Я использую WiX для создания Установщик MSI, чтобы вызвать другой установщик MSI.

  • Я могу разрешить эту ситуацию в режиме UILevel = 5 (Full UI). Мое решение - добавить CustomAction в таблицу UISequence, которая вызывает другой MSI. Он не получит код ошибки 1500: «Другая установка уже выполняется ...»
  • Но в режиме Slient, UILevel = 2, я не могу этого сделать, потому что он запускает CustomAction только в ExecuteSequence. Как я могу запустить свой MSI в автоматическом режиме и вызвать другой установщик MSI?

person Klaus    schedule 07.04.2012    source источник


Ответы (3)


Установите оба MSI с помощью Burn bootstrapper, включенного в wix 3.6.

person Wim Coenen    schedule 07.04.2012
comment
Я понимаю, что загрузчик Burn решит проблемы с предварительными условиями (NET 35, Java ...). Уместно ли с Msi вызвать другой msi с помощью настраиваемых действий? В любом случае, для меня это единственный выход. Надеюсь, это возможно! Спасибо, сэр! - person Klaus; 08.04.2012
comment
@klaus: из ссылки, которую я дал в своем ответе выше: Пакеты также позволяют разбивать очень большие приложения или наборы приложений на более мелкие, логические установочные пакеты, при этом представляя конечному пользователю единый продукт. - person Wim Coenen; 08.04.2012

Строго говоря, файлы MSI - это установщики транзакций, поэтому они могут выполняться только по одному.

Microsoft решает эту проблему с помощью модулей слияния, которые похожи на MSI, но используются для встраивания в файлы MSI.

Есть ли шанс, что MSI, который вы хотите встроить, может быть изменен на файл MSM?

person Phil Hannent    schedule 07.04.2012
comment
Думал такое решение. Это означает, что дочерний MSI встроен в базу данных родительского MSI. Но я не могу использовать это решение, потому что мой дочерний MSI может измениться после времени компиляции, родительский MSI может вызывать его только через CustomAction. - person Klaus; 07.04.2012

Вы можете попробовать запустить второй MSI с отложенным асинхронным настраиваемым действием, без проверки кода возврата, запланированным после стандартного действия InstallFinalize. Таким образом, настраиваемое действие будет запущено после завершения установки первого.

person Bogdan Mitrache    schedule 07.04.2012
comment
Если мы запланируем это, произойдет ошибка. Ошибка 2762: невозможно запланировать операцию. Действие должно быть запланировано между InstallInitialize и InstallFinalize. - person Klaus; 07.04.2012
comment
Я забыл, что отложенное настраиваемое действие нельзя запланировать после InstallFinalize. Однако вы можете попробовать прямо перед этим, после InstallExecute. - person Bogdan Mitrache; 07.04.2012