Вот какой расклад. Есть у меня продукт, ориентированный на Microsoft-centric корпоративный рынок (HgLab). Правилом хорошего тона там является наличие установщика в виде MSI-пакета, коий я и пытаюсь сочинить уже практически неделю.
Я считаю себя неглупым человеком. Плюс, за годы у меня (как и у многих, думаю) выработался инстинкт, которой периодически подсказывает, что, мол "вот то, что ты делаешь -- слишком сложно, давай-ка поищи решение попроще". И вот в случае с WiX/MSI это чутье начало давать сбои; как-то не выходит продраться через этот лес отсутствия логики, дизайна и здравого смысла. Поначалу я чувствовал себя умственно отсталым. Как же так? Хвалят же, разбираются же, пишут же инсталляторы -- а у меня не выходит... А потом я постиг дзен.
При работе с WiX/MSI нет простых способов сделать что бы то ни было. Абсолютно. Если есть два относительно простых и логичных пути сделать что-то, то MSI пойдет по своему, третьему и абслютно неадекватному. Набор стандартных, единообразных, диалогов и элементов оформления? Нет, рисуйте все сами. Нормальная поддержка кнопки "Назад"? Увы. Взаимоисключающие компоненты? Обойдетесь. Локализация? И не вспоминайте. Единый установщик для 32 и 64 бит? Не в этой жизни. Зависимости? Мимо. Хоть сколько-нибудь сложные выражения? Да ну откуда...
Но зато! Рассовать весь инсталлятор по таблицам? Да-да-да, и побольше! Установка по требованию пользователя (advertised)? Пожалуйста, это очень нужная в 90% возможность. Алогичные правила по установке и удалению ярлыков и файлов? Сколько угодно! Три варианта апгрейдов? Извольте! Поддержка имен 8.3? Конечно-конечно. Пакеты трансформаций? К вашим услугам!
Вот к каким выводам я пришел (извините, наболело).
MSI — overengineered bloatware с тянущимися со времен Windows 95 потрохами и костылями, отрезать которые Microsoft не в состоянии в силу своей ненормальноый привязанности к обеспечению обратной совместимости; MSI был создан самыми лучшими, самыми высоколобыми архитектурными астронавтами и написан худшими, рукожопейшими индусами; MSI вобрал в себя худшее из пакетных менеджеров, бандлов, установок в стиле Windows 3.11 и DOS; MSI загажен необъясинмыми противоречиями и ограничениями.
И вот поверх всего этого угара мы имеем WiX, который вроде как "зе бест"" для создания пакетов MSI, а на деле оказывается тонюсенькой прослоечкой. Никакой абстракции, никакого упрощения жизни для того подавляющего большинства вариантов использования, когда надо сказать "вот мои скомпилированные артефакты, собери из них установщик и не канифоль мне мозги гуидами, компонентами, директориями и keyPath'ами". Нет. Мы просто берем "реляционные" таблицы из MSI и напяливаем их на чрезвычайно человеколюбивый XML. Попутно не забываем обо всех косяках и идиосинкразиях исходного формата и гордо выставляем их напоказ. А, и еще называем все утилиты из toolchain'а невообразимыми и незапоминающимися именами (votive? candle? light? tallow? mallow? упоролись все?) и -- вуаля! -- получаем WiX.
Все это очень печально, господа. Так не должно быть.
HgLab: Mercurial Server and Repository Management for Windows
Здравствуйте, Нахлобуч, Вы писали:
Н>Вот какой расклад. Есть у меня продукт, ориентированный на Microsoft-centric корпоративный рынок (HgLab). Правилом хорошего тона там является наличие установщика в виде MSI-пакета, коий я и пытаюсь сочинить уже практически неделю.
Всё это сделано, чтобы вы купили InstallShield. Причём профессиональную версию. Стоит он совсем недёшево, но альтернатив, насколько я понимаю, нет.
Здравствуйте, Нахлобуч, Вы писали:
Н>MSI — overengineered bloatware с тянущимися со времен Windows 95 потрохами и костылями, отрезать которые Microsoft не в состоянии в силу своей ненормальноый привязанности к обеспечению обратной совместимости; MSI был создан самыми лучшими, самыми высоколобыми архитектурными астронавтами и написан худшими, рукожопейшими индусами; MSI вобрал в себя худшее из пакетных менеджеров, бандлов, установок в стиле Windows 3.11 и DOS; MSI загажен необъясинмыми противоречиями и ограничениями.
+1. Если не астронавтами — то как минимум космонавтами.
Н>И вот поверх всего этого угара мы имеем WiX, который вроде как "зе бест"" для создания пакетов MSI, а на деле оказывается тонюсенькой прослоечкой. Никакой абстракции, никакого упрощения жизни для того подавляющего большинства вариантов использования, когда надо сказать "вот мои скомпилированные артефакты, собери из них установщик и не канифоль мне мозги гуидами, компонентами, директориями и keyPath'ами". Нет. Мы просто берем "реляционные"
На самом деле во многом теперь всё стало намного проще, чем скажем года 4 назад. Я раньше занимался им довольно плотно, но уже всё благополучно забыл. =) Простенький инсталлятор с регистрацией сервиса (в этом году) — у меня занял 200 строк (8Кб) документа, что на самом деле клёва. Но даже экстеншны по управлению виндовс-сервисом — как был идиотским так и остался (что в итоге на самом деле приводит к тому, что либо пусть его только ставит и не трогает, либо делать ручками на custom actions... что тоже уже пройдено).
Здравствуйте, Нахлобуч, Вы писали:
Н>MSI — overengineered bloatware с тянущимися со времен Windows 95 потрохами и костылями
+1024.
Скачиваешь их "шмоток сетапа", сначала он шуршит диском, что-то там распаковывает, сравнивает, бац — "не могу продолжить"! Или могу, но потом не находит файл сетапа предыдущей версии Или нет нужных апдейтов (а раньше нельзя было проверить — ДО распаковки??) И постоянно что-то там на диске пишет, пишет... как Донцова, без передыху!
Пусть ламеры оборжутся, но на сегодня НЕТ хорошего инструмента создания сетапов — не грех и написать новый.
Хотя ещё со времён ДОСа ни у одной программы не было проблем тупо распаковать свой *.arj — лучший "сетап" всех времён.
Здравствуйте, Нахлобуч, Вы писали:
Н>Все это очень печально, господа. Так не должно быть.
Ты абсолютно прав.
Лично я считаю необходимость работать с WiX для себя духовным упражнением, ведущим к просветлению.
Сам одно время имел дело с инсталляторами и постарался избегать их, по возможности.
Основная проблема в том, что на первый взгляд кажется, что написать инсталлятор — плевое дело.
Распаковал файлики, прописал что надо в реестр и вуаля!!!
Однако, не все так просто. К инсталлятору предъявляется огромное количество требований.
Этих мелочей — вагон и маленькая тележка.
Как вести себя при обновлениях разного рода? Тут тебе и minor/major upgrade, и maintenance случай.
downgrade-случай. Возможны и минипатчи. И то, что кто то руками подменил файлики.
Что делать если некоторый файл нельзя удалить/скопировать?
Надо избежать, по возможности перезагрузок.
При сбоях любого рода и на любом этапе оставить систему в валидном состоянии.
Крайне желательно, чтобы был откат к состоянию до начала некорректной установки.
Особый случай — установка всяких пререквизитов. Их тоже надо уметь откатывать.
Таким образом, процесс гораздо сложнее, чем кажется.
Поэтому в msi сознательно используется декларативный язык, чтобы была возможность описать,
что именно хочется. А сама реализация оставлена недоступной, чтобы оградить от ненужных подробностей.
В большинстве случаев, когда не требуется ничего сверхмудрого, проблем не возникает.
Все можно сделать достаточно шустренько.
А вот если надо сделать шаг в сторону, то уйти от сложных подробностей не удастся.
Впрочем, они не столь и сложные. Со временем рука набивается.
Но времени на их освоение затратить придется.
Здравствуйте, RiNSpy, Вы писали:
RNS>Здравствуйте, Нахлобуч, Вы писали:
Н>>Вот какой расклад. Есть у меня продукт, ориентированный на Microsoft-centric корпоративный рынок (HgLab). Правилом хорошего тона там является наличие установщика в виде MSI-пакета, коий я и пытаюсь сочинить уже практически неделю.
RNS>Всё это сделано, чтобы вы купили InstallShield. Причём профессиональную версию. Стоит он совсем недёшево, но альтернатив, насколько я понимаю, нет.
Не сказал бы, что InstallShield сильно поможет. С ним написать инсталлятор тоже не проще. Может даже и сложнее.
Там еще бывает и баги самого InstallShield вылазят, с которыми сложно бороться.
[]
B>Не сказал бы, что InstallShield сильно поможет. С ним написать инсталлятор тоже не проще. Может даже и сложнее. B>Там еще бывает и баги самого InstallShield вылазят, с которыми сложно бороться.
NSIS как-то не очень... то есть, совсем "не" оказался. В основном, из-зи синтаксиса скриптов.
А Wix... Из последнего запомнил только, что сделать его полезным в CI, надо хорошенько покашеварить с его Тargets-файлами, что-то сделать с захардкоженными абсолютными путями в проектах... Ну короче, да, дзен тот еще.
Здравствуйте, Нахлобуч, Вы писали:
Н>И вот в случае с WiX/MSI это чутье начало давать сбои; как-то не выходит продраться через этот лес отсутствия логики, дизайна и здравого смысла. Поначалу я чувствовал себя умственно отсталым. Как же так? Хвалят же, разбираются же, пишут же инсталляторы -- а у меня не выходит... А потом я постиг дзен.
Ага. Знакомо. Вообще, постичь WiX можно только одним способом — принятием позы лотоса и грудным пением "Оммммммм" в течение пяти минут каждый раз, когда начинает косить шиза. Ибо понять невозможно.
В принципе согласен, но хочу заметить что это всё происходит только в первый раз. Т.е. надо один раз посидеть основательно, чтобы составить один xml с подходящим вам инсталлятором. А дальше можно спокойно копировать его из проекта в проект меняя незначительные детали.
Здравствуйте, baily, Вы писали:
B>Однако, не все так просто. К инсталлятору предъявляется огромное количество требований. B>Как вести себя при обновлениях разного рода? Тут тебе и minor/major upgrade, и maintenance случай. B>downgrade-случай. Возможны и минипатчи. И то, что кто то руками подменил файлики. B>Что делать если некоторый файл нельзя удалить/скопировать? B>Надо избежать, по возможности перезагрузок. B>При сбоях любого рода и на любом этапе оставить систему в валидном состоянии. B>Крайне желательно, чтобы был откат к состоянию до начала некорректной установки. B>Особый случай — установка всяких пререквизитов. Их тоже надо уметь откатывать.
В случае с MSI эти требования выдвигаются, замечу, не к самому пакету MSI, а к рантайму Windows Installer, который эти пакеты обрабатывает. И это уже совсем другой коленкор.
B>Таким образом, процесс гораздо сложнее, чем кажется.
Я представляю себе сложность самого процесса, но опять же: тот факт, что сложен процесс не значит, что формат пакета (и процесс его создания) должен быть настолько плох.
B>Поэтому в msi сознательно используется декларативный язык, чтобы была возможность описать, что именно хочется. А сама реализация оставлена недоступной, чтобы оградить от ненужных подробностей.
Он, в лучших традициях архитектурных астронавтов, используется везде -- и по делу, и без дела. Можно декларативно описать те изменения, которые нужно применить к системе (вот так должна выглядеть файловая система, вот так -- реестр, вот такие разрешения и т.д.), но дальше... Квадратное катаем, круглое таскаем: всё распихиваем по таблицам, придумываем "декларативную публикацию событий", декларативную же "подписку", вычурный синтаксис работы со свойствами и со всем этим пытаемся взлететь.
HgLab: Mercurial Server and Repository Management for Windows
Я курирую создание инсталляторов для компании, в которой работаю, уже несколько лет. И могу утверждать, что самое интреенсое вас ждет месяца через 2-3. Разделение установки на клиентскую и серверную часть. Скрипт установки. Deferred и Immediate custom actions. Поиск места, куда установить "RemoveExistingProducts". Логика апгрейда файлов. Key paths. Бутстраперы... Крепитесь.
Тут высказали мнение "покупайте InstallShield и все у вас будет". У нас куплен InstallShield. Оно "будет" для проектов вида "hello world". Шаг влево / шаг вправо — и нужно снова лезть во внутренности SQL табличек, только в отличие от WiX тут будут еще и IS-специфичные таблички и custom actions которые будут все портить .
Здравствуйте, Нахлобуч, Вы писали:
Н>MSI вобрал в себя худшее из пакетных менеджеров, бандлов, установок в стиле Windows 3.11 и DOS; MSI загажен необъясинмыми противоречиями и ограничениями.
Я конечно имею не очень большой опыт в работе с MSI, и когда я его изучал, то некоторые вещи вызывли прямо скажем непонимание.
Но если нужно что-то не слишком замороченное (замороченное, это как писал Eye of Hell — с обновлениями, хитрыми custom action и т.д.), то все выглядит не таким и страшным.
Больше всего непонимания вызывает, конечно же UI. Он своеобразный.
Н>И вот поверх всего этого угара мы имеем WiX, который вроде как "зе бест"" для создания пакетов MSI, а на деле оказывается тонюсенькой прослоечкой. Никакой абстракции, никакого упрощения жизни для того подавляющего большинства вариантов использования, когда надо сказать "вот мои скомпилированные артефакты, собери из них установщик и не канифоль мне мозги гуидами, компонентами, директориями и keyPath'ами".
За давностью лет я, уже, конечно забыл многое, но вроде еще во времена Wix 3.0 была возможность именно что сгенерировать простейший инсталлятор буквально скормив на вход набор файлов и потом в паре мест подправив руками (а может и без этого).
Здравствуйте, Михаил Романов, Вы писали:
МР>Но если нужно что-то не слишком замороченное (замороченное, это как писал Eye of Hell — с обновлениями, хитрыми custom action и т.д.), то все выглядит не таким и страшным.
Как по мне — что по настоящему заамороченное, — это как раз тот самый необходимый дзен, и тыща маленьких мелочей, навроде "почему в контекстном меню на advertised shortcut нет пункта run as administrator в windows 7?"
Н>Все это очень печально, господа. Так не должно быть.
Имелся аналогичный опыт разобраться с этим выкидышем. Помучался-помучался, плюнул, взял простой как пробка NSIS, и довольно быстро наваял инсталлер на нем. Заодно и юзеры довольны, так как в отличие от MSI инсталляха получилась очень лекговесная.
Новости очень смешные. Зря вы не смотрите. Как будто за наркоманами подсматриваешь. Только тетка с погодой в завязке.
There is no such thing as a winnable war.
Н>MSI — overengineered bloatware с тянущимися со времен Windows 95 потрохами и костылями, отрезать которые Microsoft не в состоянии в силу своей ненормальноый привязанности к обеспечению обратной совместимости; MSI был создан самыми лучшими, самыми высоколобыми архитектурными астронавтами и написан худшими, рукожопейшими индусами; MSI вобрал в себя худшее из пакетных менеджеров, бандлов, установок в стиле Windows 3.11 и DOS; MSI загажен необъясинмыми противоречиями и ограничениями.
Так и есть. Я занимался подобными вопросами лет 5 назад и у меня возникали полностью аналогичные эмоции. Все закончилось созданием кастомного инсталятора, со своим UI, который хендлит депенденси, конфликты версий, содержит логику и прочая. Затем он вызывает .msi с кучей параметров командной сторки и он толкьо инсталит-апдейтит то что надо. Никакого UI(кроме окошка 'please wait'), никакой логики.
Н>И вот поверх всего этого угара мы имеем WiX, который вроде как "зе бест"" для создания пакетов MSI, а на деле оказывается тонюсенькой прослоечкой.
Так и есть но остальные еще хуже. Одно из преимуществ WiX — можно легко написать тулзу(или заюзать имеющуюся), которая в процессе CI динамически генерит .xml для WiX и потом собирать по ним .msi.
Н>Все это очень печально, господа. Так не должно быть.
Увы, но подвижек тут не видно.