Дзен WiX/MSI
От: Нахлобуч Великобритания https://hglabhq.com
Дата: 29.07.13 13:12
Оценка: 57 (24) +17 :))) :))) :))) :))) :))) :))) :)
Вот какой расклад. Есть у меня продукт, ориентированный на 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
Re: Дзен WiX/MSI
От: RiNSpy  
Дата: 29.07.13 13:23
Оценка:
Здравствуйте, Нахлобуч, Вы писали:

Н>Вот какой расклад. Есть у меня продукт, ориентированный на Microsoft-centric корпоративный рынок (HgLab). Правилом хорошего тона там является наличие установщика в виде MSI-пакета, коий я и пытаюсь сочинить уже практически неделю.


Всё это сделано, чтобы вы купили InstallShield. Причём профессиональную версию. Стоит он совсем недёшево, но альтернатив, насколько я понимаю, нет.

Хотя нет, вспомнил удобную бесплатную туллзу, что когда-то использовал: http://dennisbareis.com/makemsi.htm
Re: Дзен WiX/MSI
От: fddima  
Дата: 29.07.13 13:33
Оценка:
Здравствуйте, Нахлобуч, Вы писали:

Н>MSI — overengineered bloatware с тянущимися со времен Windows 95 потрохами и костылями, отрезать которые Microsoft не в состоянии в силу своей ненормальноый привязанности к обеспечению обратной совместимости; MSI был создан самыми лучшими, самыми высоколобыми архитектурными астронавтами и написан худшими, рукожопейшими индусами; MSI вобрал в себя худшее из пакетных менеджеров, бандлов, установок в стиле Windows 3.11 и DOS; MSI загажен необъясинмыми противоречиями и ограничениями.

+1. Если не астронавтами — то как минимум космонавтами.

Н>И вот поверх всего этого угара мы имеем WiX, который вроде как "зе бест"" для создания пакетов MSI, а на деле оказывается тонюсенькой прослоечкой. Никакой абстракции, никакого упрощения жизни для того подавляющего большинства вариантов использования, когда надо сказать "вот мои скомпилированные артефакты, собери из них установщик и не канифоль мне мозги гуидами, компонентами, директориями и keyPath'ами". Нет. Мы просто берем "реляционные"

На самом деле во многом теперь всё стало намного проще, чем скажем года 4 назад. Я раньше занимался им довольно плотно, но уже всё благополучно забыл. =) Простенький инсталлятор с регистрацией сервиса (в этом году) — у меня занял 200 строк (8Кб) документа, что на самом деле клёва. Но даже экстеншны по управлению виндовс-сервисом — как был идиотским так и остался (что в итоге на самом деле приводит к тому, что либо пусть его только ставит и не трогает, либо делать ручками на custom actions... что тоже уже пройдено).

Зато Роб вот уже кансалтинг на эту тему открыл.
Re: Дзен WiX/MSI
От: herethere  
Дата: 29.07.13 15:11
Оценка:
Здравствуйте, Нахлобуч, Вы писали:

Н>MSI — overengineered bloatware с тянущимися со времен Windows 95 потрохами и костылями


+1024.
Скачиваешь их "шмоток сетапа", сначала он шуршит диском, что-то там распаковывает, сравнивает, бац — "не могу продолжить"! Или могу, но потом не находит файл сетапа предыдущей версии Или нет нужных апдейтов (а раньше нельзя было проверить — ДО распаковки??) И постоянно что-то там на диске пишет, пишет... как Донцова, без передыху!
Пусть ламеры оборжутся, но на сегодня НЕТ хорошего инструмента создания сетапов — не грех и написать новый.

Хотя ещё со времён ДОСа ни у одной программы не было проблем тупо распаковать свой *.arj — лучший "сетап" всех времён.
Re: Дзен WiX/MSI
От: 0x7be СССР  
Дата: 29.07.13 15:25
Оценка:
Здравствуйте, Нахлобуч, Вы писали:

Н>Все это очень печально, господа. Так не должно быть.

Ты абсолютно прав.
Лично я считаю необходимость работать с WiX для себя духовным упражнением, ведущим к просветлению.
Re: Дзен WiX/MSI
От: mrTwister Россия  
Дата: 29.07.13 15:40
Оценка:
Здравствуйте, Нахлобуч, Вы писали:

Подтверждаю, все так и есть. Ситуация описана очень точно!
лэт ми спик фром май харт
Re: Дзен WiX/MSI
От: baily Россия  
Дата: 29.07.13 16:18
Оценка: 1 (1) +3 -1
И согласен и не согласен.

Сам одно время имел дело с инсталляторами и постарался избегать их, по возможности.
Основная проблема в том, что на первый взгляд кажется, что написать инсталлятор — плевое дело.
Распаковал файлики, прописал что надо в реестр и вуаля!!!

Однако, не все так просто. К инсталлятору предъявляется огромное количество требований.
Этих мелочей — вагон и маленькая тележка.
Как вести себя при обновлениях разного рода? Тут тебе и minor/major upgrade, и maintenance случай.
downgrade-случай. Возможны и минипатчи. И то, что кто то руками подменил файлики.
Что делать если некоторый файл нельзя удалить/скопировать?
Надо избежать, по возможности перезагрузок.
При сбоях любого рода и на любом этапе оставить систему в валидном состоянии.
Крайне желательно, чтобы был откат к состоянию до начала некорректной установки.
Особый случай — установка всяких пререквизитов. Их тоже надо уметь откатывать.

Таким образом, процесс гораздо сложнее, чем кажется.
Поэтому в msi сознательно используется декларативный язык, чтобы была возможность описать,
что именно хочется. А сама реализация оставлена недоступной, чтобы оградить от ненужных подробностей.
В большинстве случаев, когда не требуется ничего сверхмудрого, проблем не возникает.
Все можно сделать достаточно шустренько.

А вот если надо сделать шаг в сторону, то уйти от сложных подробностей не удастся.
Впрочем, они не столь и сложные. Со временем рука набивается.
Но времени на их освоение затратить придется.
Re[2]: Дзен WiX/MSI
От: baily Россия  
Дата: 29.07.13 16:20
Оценка: +2
Здравствуйте, RiNSpy, Вы писали:

RNS>Здравствуйте, Нахлобуч, Вы писали:


Н>>Вот какой расклад. Есть у меня продукт, ориентированный на Microsoft-centric корпоративный рынок (HgLab). Правилом хорошего тона там является наличие установщика в виде MSI-пакета, коий я и пытаюсь сочинить уже практически неделю.


RNS>Всё это сделано, чтобы вы купили InstallShield. Причём профессиональную версию. Стоит он совсем недёшево, но альтернатив, насколько я понимаю, нет.


Не сказал бы, что InstallShield сильно поможет. С ним написать инсталлятор тоже не проще. Может даже и сложнее.
Там еще бывает и баги самого InstallShield вылазят, с которыми сложно бороться.
Re[3]: Дзен WiX/MSI
От: Константин Л. Франция  
Дата: 29.07.13 17:13
Оценка:
Здравствуйте, baily, Вы писали:

[]

B>Не сказал бы, что InstallShield сильно поможет. С ним написать инсталлятор тоже не проще. Может даже и сложнее.

B>Там еще бывает и баги самого InstallShield вылазят, с которыми сложно бороться.

+1

то еще г.
Re: Для еуть непрошедших
От: Wolverrum Ниоткуда  
Дата: 29.07.13 18:51
Оценка:
Здравствуйте, Нахлобуч:

Рекомендую InstallShield / InnoSetup.

NSIS как-то не очень... то есть, совсем "не" оказался. В основном, из-зи синтаксиса скриптов.

А Wix... Из последнего запомнил только, что сделать его полезным в CI, надо хорошенько покашеварить с его Тargets-файлами, что-то сделать с захардкоженными абсолютными путями в проектах... Ну короче, да, дзен тот еще.
Re: Дзен WiX/MSI
От: landerhigh Пират  
Дата: 29.07.13 20:19
Оценка: :)
Здравствуйте, Нахлобуч, Вы писали:

Н>И вот в случае с WiX/MSI это чутье начало давать сбои; как-то не выходит продраться через этот лес отсутствия логики, дизайна и здравого смысла. Поначалу я чувствовал себя умственно отсталым. Как же так? Хвалят же, разбираются же, пишут же инсталляторы -- а у меня не выходит... А потом я постиг дзен.


Ага. Знакомо. Вообще, постичь WiX можно только одним способом — принятием позы лотоса и грудным пением "Оммммммм" в течение пяти минут каждый раз, когда начинает косить шиза. Ибо понять невозможно.

Другое дело, что все остальное еще хуже
www.blinnov.com
Re: Дзен WiX/MSI
От: alex_public  
Дата: 29.07.13 21:51
Оценка: 3 (1)
Здравствуйте, Нахлобуч, Вы писали:

В принципе согласен, но хочу заметить что это всё происходит только в первый раз. Т.е. надо один раз посидеть основательно, чтобы составить один xml с подходящим вам инсталлятором. А дальше можно спокойно копировать его из проекта в проект меняя незначительные детали.
Re: Дзен WiX/MSI
От: fdn721  
Дата: 30.07.13 04:12
Оценка: +1
Есть же NIS. Всё просто и понятно.
Re[2]: Дзен WiX/MSI
От: Нахлобуч Великобритания https://hglabhq.com
Дата: 30.07.13 08:56
Оценка:
Здравствуйте, 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
Re: Дзен WiX/MSI
От: Eye of Hell Россия eyeofhell.habr.ru
Дата: 30.07.13 10:06
Оценка: 4 (3) +1
Это вы, батенька, только начали.

Я курирую создание инсталляторов для компании, в которой работаю, уже несколько лет. И могу утверждать, что самое интреенсое вас ждет месяца через 2-3. Разделение установки на клиентскую и серверную часть. Скрипт установки. Deferred и Immediate custom actions. Поиск места, куда установить "RemoveExistingProducts". Логика апгрейда файлов. Key paths. Бутстраперы... Крепитесь.

Тут высказали мнение "покупайте InstallShield и все у вас будет". У нас куплен InstallShield. Оно "будет" для проектов вида "hello world". Шаг влево / шаг вправо — и нужно снова лезть во внутренности SQL табличек, только в отличие от WiX тут будут еще и IS-специфичные таблички и custom actions которые будут все портить .
Re: Дзен WiX/MSI
От: Михаил Романов Удмуртия https://mihailromanov.wordpress.com/
Дата: 30.07.13 11:49
Оценка:
Здравствуйте, Нахлобуч, Вы писали:

Н>MSI вобрал в себя худшее из пакетных менеджеров, бандлов, установок в стиле Windows 3.11 и DOS; MSI загажен необъясинмыми противоречиями и ограничениями.

Я конечно имею не очень большой опыт в работе с MSI, и когда я его изучал, то некоторые вещи вызывли прямо скажем непонимание.
Но если нужно что-то не слишком замороченное (замороченное, это как писал Eye of Hell — с обновлениями, хитрыми custom action и т.д.), то все выглядит не таким и страшным.

Больше всего непонимания вызывает, конечно же UI. Он своеобразный.

Н>И вот поверх всего этого угара мы имеем WiX, который вроде как "зе бест"" для создания пакетов MSI, а на деле оказывается тонюсенькой прослоечкой. Никакой абстракции, никакого упрощения жизни для того подавляющего большинства вариантов использования, когда надо сказать "вот мои скомпилированные артефакты, собери из них установщик и не канифоль мне мозги гуидами, компонентами, директориями и keyPath'ами".


За давностью лет я, уже, конечно забыл многое, но вроде еще во времена Wix 3.0 была возможность именно что сгенерировать простейший инсталлятор буквально скормив на вход набор файлов и потом в паре мест подправив руками (а может и без этого).
Re[2]: Дзен WiX/MSI
От: fddima  
Дата: 30.07.13 12:25
Оценка:
Здравствуйте, Михаил Романов, Вы писали:

МР>Но если нужно что-то не слишком замороченное (замороченное, это как писал Eye of Hell — с обновлениями, хитрыми custom action и т.д.), то все выглядит не таким и страшным.

Как по мне — что по настоящему заамороченное, — это как раз тот самый необходимый дзен, и тыща маленьких мелочей, навроде "почему в контекстном меню на advertised shortcut нет пункта run as administrator в windows 7?"
Re[2]: Дзен WiX/MSI
От: Нахлобуч Великобритания https://hglabhq.com
Дата: 30.07.13 12:38
Оценка:
Здравствуйте, fdn721, Вы писали:

F>Есть же NIS. Всё просто и понятно.


Никто из человеческих инсталляторов не делает на выхлопе MSI, так что увы и ах.
HgLab: Mercurial Server and Repository Management for Windows
Re: Дзен WiX/MSI
От: Eugeny__ Украина  
Дата: 31.07.13 17:20
Оценка:
Здравствуйте, Нахлобуч, Вы писали:


Н>Все это очень печально, господа. Так не должно быть.


Имелся аналогичный опыт разобраться с этим выкидышем. Помучался-помучался, плюнул, взял простой как пробка NSIS, и довольно быстро наваял инсталлер на нем. Заодно и юзеры довольны, так как в отличие от MSI инсталляха получилась очень лекговесная.
Новости очень смешные. Зря вы не смотрите. Как будто за наркоманами подсматриваешь. Только тетка с погодой в завязке.
There is no such thing as a winnable war.
Re: Дзен WiX/MSI
От: itslave СССР  
Дата: 01.08.13 09:14
Оценка:
Здравствуйте, Нахлобуч, Вы писали:


Н>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.

Н>Все это очень печально, господа. Так не должно быть.

Увы, но подвижек тут не видно.
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.