Здравствуйте, vdimas, Вы писали:
V>Любой, где можно накидать пакет мышкой, навроде InstallShield, Wise, VisualInstaller и т.д.
Практика показывает, что ни в чём из этого "накидать пакет мышкой" невозможно. Кроме случаев, когда продукт вообще поддерживает copy deployment, и никакой "инсталлятор" ему вообще не нужен.
V>Имеет аж бегом.
Вы для начала его запустите без MSI-файла, а потом поговорим о беге и прочем.
V>Основная польза от MSI-АПИ в иерархии продукт -> компонент.
И от этой же иерархии — основной вред. Вы в курсе, как устроен инсталлятор MS SQL Server, начиная примерно с 8.0? Если нет — то вот вам домашнее задание: выразить в терминах Windows Installer сосуществование нескольких инстансов SQL Server, при этом они могут быть как различных версий, так и одинаковых.
V>В автоматическом учете компонентов (счетчики), при пользовании ими из разных продуктов.
V>В транзакционности инсталляции.
V>В возможности инсталляции по-требованию.
V>В стандартизации основных сценариев инсталляции.
V>В учете сырцов-медиа инсталляций.
V>И т.д.
Это всё здорово, если бы в нагрузку не шла реляционная база данных.
V>Еще раз для особо одаренных. Изначально был расчет на коммерческие приложения, где это, действительно, несложно.
Ещё раз для особо одарённых: это несложно для того сценария, в котором база данных не нужна вообще, от слова совсем.
V>Он фигню написал, ваще-то. Это как призывы писать программы на ассемблере. ))
Фигню пока что пишете исключительно вы. Вы сами-то хоть раз installshield запускали?
Там все эти install condition-ы пишутся точно так же, как в Orca — только не надо наизусть названия табличек знать. Вы попробуйте написать инсталлятор для веб-приложения, которое может ставиться в нескольких экземплярах на одном сервере, требует в зависимостях определённых фич IIS и наличия SQL Server Reporting Services, в который деплоятся (или апгрейдятся) репорты.
Я вас уверяю — коробку с InstallShield вы отнесёте на помоечку, и поставите себе WiX. И будете изучать структуру MSI, а вашим лучшим другом станет Orca.
V>Опиши в MSI только продукты и компоненты. Не возись с файлами, зависимостями и прочей "наркоманией", если не хочешь.
V>Перехвати требуемые custom actions и пусть в них работают твои bat-скрипты.
Круто. Вот это как раз и есть требование писать на асемблере. То есть все эти чудо-таблицы, получается, не нужны. Весь GUI делается в custom action на привычном нам языке, да? Все
реальные действия по деплойменту компонентов делаются в custom action, да? Прекрасное подтверждение моего же тезиса.
Сразу видно человека, который custom action никогда в жизни не писал.
V>Если у кого-то проблемы с руками и custom actions... блин, пусть создадут пустое приложение Windows Service на дотнете в студии, добавят к нему инсталлер сервиса, потом сделают пакет с ним и разберут получившийся MSI каким-нить просмотрщиком или экспортером в WiX. Это порядка 5-10 мин всех делов.
В отличие от вас, коллега, я (и, судя по всему, коллега Нахлобуч) провели немало часов "разбирая получившийся MSI" от разных инсталлер-генераторов. И от студийного, и от инсталлшилдовского, и от викса.
V>Там не одна логика, а целый букет:
V>- инсталляция
V>- реинсталляция/восстановление
V>- инсталляция по-требованию
V>- деинсталляция
V>- добавить компонент
V>- убрать компонент
V>- собрать инфо о пользователе
V>- ...
Дупа в том, что встроенные действия, которые поддерживают всё вот это, крайне ограничены. А кастомные писать — геморрой. Как раз потому, что про них авторы мегаархитектуры думали меньше всего.
V>"Просто описать логику" можно лишь по каждой отдельной строчке. Дык, опиши! Твоя задача будет лишь дать имя/ключ продукту/компонентам и назначить всю ту "простую логику инсталляции" по соотв событиям. А если ты потратил хотя бы день-два на эту тему, то в твоём "просто описании" будет ветвление по пропертям, например, учет того факта: UI-инсталляция или silent, а так же уровень этого UI, административная инсталляция или локальная, на текущего юзера или на всех и т.д. и т.п.
В моём "просто описании" будет ветвление по тем пропертям, которые мне нужны. Если оно вообще нужно.
И в моём "просто описании" не будет этого колоссального разрыва между встроенной и продукто-специфичной логикой.
Собственно, WiX и есть попытка сделать DSL для платформы с идиотским дизайном. А то, что вы его не понимаете, показывает только то, что вы в жизни не сталкивались с разработкой инсталляторов для более-менее массовых продуктов.