Motto

В тихом саду здравомыслия
Пусть на вас постоянно падают
кокосовые орехи пробужденности.
Чогьям Трунгпа РИНПОЧЕ


Версия для мобильного


воскресенье, 26 апреля 2009 г.

Итоги недели: возня с Wix-ом.

Продукты для бух. учёта нашей фирмы – чертвоски конфигурируемы. Клиент говорит, что ему нужно, а наши сотрудники собирают для него необходимую конфигурацию. Это делает наши продукты действительно удобными. Ходят слухи, даже о том, что люди привыкшие работать с нашими программами, больше не хотят работать с продуктами конкурентов. Всё это очень мило, но благодаря такому подходу, наши продукты до сих пор не имеют нормальной инсталляции. Точнее имеют, но она была собрана давно на Inno Setup, и используется только для базовой установки. И вот, один из клиентов выдвинул требование, предоставить ему установщик в формате MSI. Если кому-нибудь интересно, я как-нибудь напишу псто о том, почему MSI лучше, чем InnoSetup или Nsis.

Это я плавно подхожу к тому, чтобы начать жаловаться и ругаться. =) Всю неделю я провозился с созданием MSI-инсталляции для наших продуктов. Я выкурил сотни страниц мануалов по Windows Installer и open-source набору инструментов по созданию MSI-файлов – Windows Installer XML (WiX) toolset. В броузере у меня постоянно открыто штук 30 закладок с разными статьями и форумами по Wix. За эту неделю я узнал о процессе установки больше чем за всю предыдущую жизнь. Временами я даже начинал ненавидеть формат XML, за излишнюю придирчивость к комментариям.

И сейчас мне очень хочется написать что-то вроде: но наконец я закончил эту чертвоу инсталляцию. Но это не так. У меня уже есть инсталляха устанавливающая программу, копирующая конфиги и выдающая нужные права, в ней есть даже один hand-made диалог. Но сделать осталось ещё немало. Для начала надо написать DLL-ку для этой инсталляхи, добавляющую нужную запись в hosts-файл. Честно говоря, я уже начинаю жалеть о том, что взялся за это задание. Я оптимистично полагал, что сделаю всё за пару дней, – а на деле получается, что на это уйдёт как минимум 2 недели.

Может кто-нибудь из читателей имел опыт работы с Wix-ом, и может ответить на пару вопросов? Полное описание того, что нужно сделать и вопросы по теме заданы здесь: http://forum.sources.ru/index.php?showtopic=270846

7 комментариев:

  1. Мне всегда нравились Delphi программы тем, что для их инсталяции почти всегда достаточно просто скопировать EXE файл. Я думаю что можно принять эту концепцию и сделать программу так, что копироание файлов было бы самодостаточным(я знаю про регистрацию COM классов и про ярлыки, но это можно сделать через запуск по MyProg.exe -Install -RegComSvr -AddShotcuts)

    Если я чего то не понимаю то в статье "сравнение MSI и InnoSetup" можно так же добавить главу "зачем вообще нужны (сложные) инсталяторы" :-)

    Мне в своих проектах хватало WinRAR SFX (там есть простой сриптинг. очень простой.)

    ОтветитьУдалить
  2. Ну-ка, ну-ка, почему же MSI лучше, чем InnoSetup или Nsis?

    ОтветитьУдалить
  3. А почему не взять готовый продукт, который умеет создавать MSI? Тот же Adansed Installer, и стоит недорого (хотя кряки есть к нему :) )

    ОтветитьУдалить
  4. 2 Евгений:
    Мне самому больше нравятся программы, которые достаточно просто распаковать и запустить - и всё будет работать. Но тут такое дело, - в наших продуктах одного exe-файла для инсталляции мало(нужно ещё конфиги создать, и пару DLL скопировать) - это раз. Инсталлировать приходится на несколько компьютеров - это два. В случае с MSI - админ может инициировать удалённую установку с помощью Group Policy.

    2 Анонимный:
    Advanced Installer хорош(хотя и не избавляет от необходимости читать мануалы по Windows Installer-у). Но у нас, как-то так сложилось, что начальство довольно неохотно выделяет деньги на покупку софта. =( Не знаю почему так. Если будет стоять вопрос о том, чтобы выделить 300$ и купить софт, или же работник проколупается и потратит времени 600$ - то пусть лучше колупается. :)

    ОтветитьУдалить
  5. 2 Евгений:
    > я знаю про регистрацию COM классов и про ярлыки, но это можно сделать через запуск по MyProg.exe -Install -RegComSvr -AddShotcuts

    Есть ещё такое дело - права. С какими правами должна запускаться программа, чтобы иметь возможность выполнять административные задания(регистрировать COM объекты, создавать ярлыки, и возможно писать в реестр в HKLM ветку)? Прав обычного пользователя тут явно не хватит. Подход "всё в одном exe" вызывает вопрос: указывать ли в манифесте, что программе необходимы повышенные привелегии? Я не знаю. Имхо, всё это нужно проверять и отдельно тестировать. И скорее всего окажется, что лучше бы административные задачи вынести в установщик.

    ОтветитьУдалить
  6. Евгений, подход "и инсталлятор и сама программа в одном exe" имеет смысл только для крайне небольших утилиток. Наиболее яркий пример - Process Explorer Марка Руссиновича. Запускается - устанавливает драйвер и довольная работает. И все довольны.

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

    >>о том, почему MSI лучше, чем InnoSetup или Nsis.

    Поддерживаю Анонимного оратора :) Было бы интересно почитать.

    Сам пользовался только InnoSetup и Nsis, до Windows Installer как то руки не дошли в свое время. Как это обычно бывает - инсталлятор нужен был "прямо сейчас" поэтому выбор пал на InnoSetup.

    ОтветитьУдалить
  7. Вообще то не должна программа сама устанавливать комы и лезть куда ей не надо... Да и в принципе грамотное написание программы не разрешает ей пользоваться правами администратора (только если это системная программа типа антивируса). Иначе при корпоративной ориентации программы проблем потом не оберешься. Да и сейчас висты всякие есть, которые тоже создадут здесь свои проблемы... Поэтому все установки кома, реестры и так далее должны делаться сугубо на уровне инсталляции... Благо Wix это все делает легко...

    ОтветитьУдалить

Постоянные читатели