Wix для установки нескольких приложений

У меня наверное странная просьба.

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

Раньше я устанавливал одну программу, а не две.

Я буду признателен за любые зацепки.


person user187023    schedule 09.10.2009    source источник


Ответы (5)


Установщик Windows имеет концепцию «функций», которые могут быть выбраны для установки или опущены. Если вы уже создали работающий установщик, то в ваших файлах WIX есть хотя бы один элемент <Feature>.

Просто создайте несколько <Feature> элементов, а затем используйте <UIRef Id="WixUI_Mondo" /> или <UIRef Id="WixUI_FeatureTree" />, чтобы пользователь мог выбирать, какие функции он хочет установить.

person Wim Coenen    schedule 09.10.2009
comment
Вы можете подделать 2 приложения в 1 MSI, разделив его на функции. Однако, когда дело доходит до применения патчей, у вас никогда не будет возможности обновить одну функцию, но не другую, и поэтому все развалится. - person David Newcomb; 08.06.2010
comment
@ Дэвид: у вас есть пример того, как это разваливается? Проблем с блокировкой не вижу сразу. Не стесняйтесь писать об этом в блоге, я подписался на вашу ленту. - person Wim Coenen; 08.06.2010
comment
С точки зрения установщика, это очень плохая идея. Функции подразумеваются как части одной и той же программы, а не как отдельные программы вместе. Способ установки нескольких программ - это цепочка или загрузчик. Я бы вложил свои деньги в цепочку, но это личный вкус и опыт разговора. - person Christopher B. Adkins; 07.01.2011
comment
Кто должен определять, что является отдельной программой, а что - функцией? Если я ищу файлы .exe в папке программных файлов Visual Studio 2010 Express, я нахожу 14 исполняемых файлов. Должны ли все они иметь отдельные установщики? Глитжкоф приводит веские аргументы в пользу отдельных установщиков, но, очевидно, эти аргументы не всегда применимы. - person Wim Coenen; 07.01.2011
comment
Вим, хорошее замечание. Эти исполняемые файлы обычно не имеют жизненного цикла сами по себе, поскольку они доставляются локально в папку продукта Visual Studio и функционируют как часть набора продуктов. Как правило, это не отдельные двоичные файлы, которые будут запускаться как программа в меню «Пуск», а утилиты, которые вызываются из самой Visual Studio. С другой стороны, установщик Visual Studio включает в себя несколько других установщиков как часть цепочки установки. Эти установщики спроектированы так, чтобы их можно было обновлять отдельно от остальной части пакета продуктов. - person Stein Åsmul; 24.05.2011

Связность и взаимосвязь: объединение приложений в один файл MSI может показаться хорошей идеей. Это кажется интуитивно приятным и простым. Однако, исходя из реального опыта, я почти всегда разбиваю приложения для установки с помощью их собственных файлов MSI, и мне тоже не нравятся многоязычные настройки (настоящие многоязычные настройки трудны, потому что переведенные контент обычно не готов, когда маркетинг и продажи требуют быстрого выпуска версии на родном языке (обычно английской версии).

Развертывать приложения вместе действительно безопасно только тогда, когда они гарантированно:

  1. Всегда использоваться конечными пользователями вместе
  2. Всегда получайте обновления в одно и то же время
  3. Не будет существенно увеличиваться в размерах со временем (Localization, New Prerequisites, etc...)

И обычно это невозможно предсказать. Обычно новые требования появляются быстро.

Центральная задача: What will likely take on a release-cycle of its own? (разделите ее прямо сейчас). Все обычно случается внезапно! Вот некоторые общие проблемы:

Исправления ошибок: если только в одном приложении есть ошибка, руководство захочет доставить только один новый MSI и оставить приложение 2 нетронутым и без необходимости выполнять новый цикл контроля качества для обоих приложений после установки. Это необходимо для снижения риска и предоставления обновлений меньшего размера, которые также можно быстрее протестировать и проверить. Исправление очень сложно и, как правило, безопаснее для файлов MSI, которые максимально просты, без слишком большого количества языков, настраиваемых действий или конструкций графического интерфейса.

Локализация: внезапно вы получаете требование сделать приложение 1 доступным на итальянском языке, приложение 2 не нужно переводить. Языковая поддержка имеет тенденцию значительно усложнять настройку, не говоря уже о ее размере. Ваш красивый и простой MSI внезапно стал сложным в обслуживании и вялым в создании. Это также настоящая боль, если вам нужна единая установка, и вы переводите ее на многие языки - вы не сможете скомпилировать RTM-версию, пока не будут обновлены все языковые обновления. Я могу сказать вам прямо сейчас, что маркетинг / продажи у людей не возникнет идеи сдерживать английскую версию до тех пор, пока не будут готовы все локализованные версии.

QA / UAT: если приложения большие, доставка 2 отдельных файлов MSI упростит разделение усилий по тестированию между разными командами QA и доставку новых обновлений с помощью ночных сборок и т. д.

График выпуска: внезапно график выпуска приложений меняется - приложение 1 теперь обновляется каждый месяц, а приложение 2 обновляется только каждые шесть месяцев. Если приложениями используют разные пользователи, как вы доставляете обновления? Собрать все это в одном MSI и присвоить ему новый номер версии только для того, чтобы пользователи приложения 2 снова установили одно и то же приложение?

Примените к пакетам развертывания общие принципы разработчика: сплоченность и привязку, и вы избавитесь от множества проблем. Если приложения сейчас ИЛИ в будущем могут начать свой собственный жизненный цикл - сразу же разделите их развертывание. А кто может заглянуть в будущее?

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

Обновление Wix: с появлением Wix для создания сложных настроек стало проще создавать включаемые файлы Wix, которые можно скомпилировать в несколько файлов MSI. Фактически это становится более гибким типом модуля слияния. Это может упростить разделение или объединение файлов MSI в будущем. См. обсуждение этой функции здесь. Еще одна ссылка.

Чистый размер установки. Существуют некоторые ограничения в отношении количества компонентов и файлов, которые вы можете иметь в одном MSI. Некоторые подробности:

По этой и другим причинам, перечисленным выше, может быть полезно разложить огромный MSI на несколько связанных MSI, чтобы упростить обслуживание (скорость сборки и компиляции, восстановление только одного из многих файлов MSI и т. Д.). Наконец, вы должны придерживаться использования одного файла для каждого компонента, чтобы обновление и исправление работали правильно. Несколько файлов MSI можно установить последовательно с помощью загрузчиков или приложений запуска, таких как Burn from WiX, или функций в коммерческих инструментах, таких как Installshield и Advanced Installer. Вот ответ, который затрагивает по этой теме. И просто добавив другой ответ, который немного похож.


Ссылки:

person Stein Åsmul    schedule 10.10.2009
comment
Вы хотели сказать Chainer вместо bootstrapper? - person Christopher B. Adkins; 07.01.2011
comment
У отдельных установок есть недостатки. С отдельными, но очень похожими настройками вы столкнетесь с проблемами двойного источника. Делать одно и то же обновление много раз в разных местах. Используйте для этого общий код, включенный в обе настройки, и переходите, когда логика настройки расходится - что так и будет. Ожидайте неожиданного, но используйте то, что вы можете, столько раз, сколько сможете, и ради бога получите систему контроля версий, способную к ветвлению. У руководства есть способ изменить требования быстрее, чем вы сами можете написать неуправляемый код. - person Stein Åsmul; 09.01.2013

Вы не можете установить несколько приложений с одного MSI. Даже если вы придумаете, как это сделать, вам действительно не стоит этого делать.

Вместо этого имейте отдельные MSI для каждого приложения и используйте загрузчик для установки обоих. Например. вы можете использовать Inno Setup для создания автономного загрузочного исполняемого файла, который устанавливает оба MSI (и любые предварительные условия).

Кстати, Wix не занимается созданием загрузчиков, поэтому вам нужно использовать его вместе с другим инструментом.

person DSO    schedule 11.10.2009
comment
Wix теперь поддерживает загрузчики с помощью инструмента записи . Вот блог самого Роба Меншинга: robmensching. ru / blog / posts / 2009/7/14 / Let-Talk-about-Burn - person Stein Åsmul; 02.05.2015

Вы можете сделать вложенный установщик msi до Windows 4.

Но в любом случае это не должно быть устаревшим по какой-то причине.

Замена api заключается в вызове msiembeddedui и создании цепочки транзакций.

person John    schedule 18.04.2012

Вы можете создать несколько MSI, а затем объединить их в один, содержащий MSI. «Родительский» MSI-файл позволяет вам выбрать, какое приложение установить, а затем просто запускает этот MSI-файл.

Если вам действительно нужны 2 приложения, то существуют конструкторы установщиков, не относящиеся к MSI (например, NSIS), которые позволяют это сделать, но вы должны делать всю работу самостоятельно.

person David Newcomb    schedule 08.06.2010
comment
Параллельные установки - это устаревшая функция установщика Windows. msdn.microsoft.com/en-us/library/aa368010 (VS.85) .aspx - person Wim Coenen; 08.06.2010