Как можно создать установщик для составных приложений под Windows?

#installation #windows-installer

#установка #windows-installer

Вопрос:

У нас есть продукт с более чем 100 «частями», большинство из которых являются дополнительными «плагинами». Мы хотели бы, чтобы непрограммист мог создавать «настраиваемый» установщик для каждого клиента / продажи. Нашим идеалом был бы просто один исполняемый файл / msi со структурой папок, из которой можно было бы удалять файлы / папки, тогда при запуске установщик просто не предлагал бы функции, соответствующие удаленным битам.

Отдельная, но похожая проблема заключается в том, что разработчики этих плагинов не являются экспертами по установке, и мы предпочли бы не редактировать общий исходный код установщика, чтобы добавить / удалить его из нашего набора сборки. Для этого мы использовали функцию «синхронизированные папки» в Advanced Installer, но нам хотелось бы, чтобы для каждого подключаемого модуля была отдельная функция выбора.

Существует ли цепочка инструментов установщика, которая может поддерживать такое (или подобное) поведение?

Если да, есть ли у кого-нибудь советы о том, как на самом деле реализовать его с помощью указанного инструмента?

Ответ №1:

Я создал такой стек инструментов на своей последней работе. Мы разрабатывали линейку продуктов с десятками семейств сервисов, сотнями функций, тысячами модулей слияния и десятками тысяч файлов в обычном установщике.

Каждый модуль слияния был создан с использованием IsWiX и скомпилирован с использованием WiX. Затем мы использовали WiX XML в качестве входных данных для нашей системы автоматизации сборки для создания установщиков InstallShield. Семейство сервисов будет иметь XML-файл для описания его части дерева функций, и все это будет отправлено в пустой проект InstallShield.

Наконец, XML-файл продукта будет описывать INSTALLDIR, UpgradeCode и другие метаданные, а также какие функции использовать. Мы создали десятки и десятки установщиков на основе этого общего базового кода.

Потребовалось бы несколько дней, чтобы объяснить все, но это дает вам идею. Для более простой среды вы могли бы создать пользовательский интерфейс для генерации кода WiX, а затем скомпилировать его в MSI.

Но я не знаю, что я когда-нибудь передам это непрограммисту. Создание установщиков — это программирование.

Комментарии:

1. Спасибо за ответ, пока что WiX, по-видимому, является частью любого решения, поскольку фрагменты XML для отдельных частей могут быть переданы / скомпонованы в проект установщика. Кроме того, спасибо за ссылку на IsWiX, я еще не нашел этот редактор. Конечно, создание пользовательского интерфейса для представления списка элементов / «функций» на выбор — это программирование, но я не могу согласиться с тем, что выбор элементов — это программирование. Я просто надеюсь свести к минимуму затраты на программирование для создания (и обслуживания) этого меню.

2. Мы использовали модули слияния, потому что первоначально модули слияния были созданы с использованием Orca и Visual Studio Deployment Projects 2003, затем InstallShield 9 — 2011, затем WiX 3.5 — 3.7. В течение этого времени они использовались с использованием InstallShield 9 — 2011. Если вы остаетесь в мире, использующем только WiX, вы можете просмотреть фрагменты, библиотеки и двоичные библиотеки. Если вы хотите использовать IsWiX, вы должны оставаться с модулями слияния, поскольку это единственная схема / сценарий, для поддержки которого был запрограммирован конструктор файлов и папок. (Моя бывшая компания оплачивала счета, поэтому мы сделали это, исходя из их потребностей.)

Ответ №2:

В пакете MSI нет инструмента, который создает функции во время выполнения, по крайней мере, нет инструмента на основе MSI. Это слишком усложняет логику установки, поскольку вам потребуется очень сложное пользовательское действие, которое считывает содержимое папок, найденных рядом с установщиком, а затем генерирует записи в следующих таблицах MSI: Files, Directory, Component, Feature, FeatureComponents. А затем подключите все это.

Это совсем не так просто сделать, и что-то, что не имеет большого опыта в создании пакетов MSI, очень подвержено ошибкам.

рассматривали ли вы / пробовали какие-либо другие сборщики пакетов, отличные от MSI?

Комментарии:

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