Как стать автором
Обновить

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

Tl;dr, но спасибо за исследование.
Давно не поднималась тема создания инсталлятора, в частности, под виндовс. Я уж думал, что все давным давно уже в msi пакуются

Вот по этому мне проще написать инсталлятор под Винду на C++/Qt и не мучатся. Зачем использовать NSIS и ему подобное если только инсталляторами в компании не занимаются отдельные люди не программеры. Ладно еще msi, там можно развертывание проводить на кучу машин одновременно, но NSIS?

Причины могут быть самыми разными.


Например, в компании "так принято испокон веков" и никто ничего менять не будет.


Кроме того, специализированные средства для создания инсталляторов более удобны, чем обычный язык программирования общего назначения, поскольку содержат готовые удобные механизмы. В результате имеем быстрый старт — не надо писать гору необходимых примитивов, начиная со сканирования подкаталогов с файлами и заканчивая упаковкой этого добра (установщика и файлов) в один общий файл.

Формально да. Вы правы. Идея инсталляторов была в упорядочивании стандартного инструментария. Но когда я копался внутри них выяснилось что легко сделать элементарный интсталлятор копирующий программу в каталог и регистрирующий ее в «программах». Но шаг влево, шаг вправо и все становиться очень плохо. Например при необычных требованиях по записям в реестр возникают большие проблемы. Копирование dll в папку с другой программой — затык конкретный. В общем плюнул я на инсталляторы и написал свою установку. Быстро компактно и удобно.

Никто не мешает решать проблемы плагинами или программами, которые пишутся на С++ или любом другом языке программирования. А инсталлятор будет решать рутинные задачи.


И да, просто написать программу, которая будет решать проблему установки. Там ничего особо страшного нет.
Только придется долго и нудно писать все необходимые примитивы для автоматизрованной сборки установочного файла и установки программы.


Копирование dll в папку с другой программой — затык конкретный.

А что тут сложного, что можно решить на другом языке, но нельзя сделать в инсталляторе?
На NSIS и Wise по крайней мере такое без проблем проделывал.

Ну и зачем плагины если все сразу можно написать самому.
Поймите я не против инсталляторов — они полезны в 2х случаях:
1)Инсталлятор делает отдельный человек по инструкции и он обычно максимум начинающий программист. Обычно просто уровень сисадмина/тестировщика и умение писать скрипты. Применяется в крупных компаниях.
2)Необходимо массированное развертывание, часто по расписанию чрез домен и т.д. и т.п. Тогда msi и вперед, без вариантов. Ну или системы пакетов и тому подобного.
Ну и доп вариант нужен элементарный установщик — NSIS и Wise подойдут идеально, особенно если ты их уже знаешь.
Иначе куча проблем. Все инсталляторы которые я знаю дико неудобны и ограничены в настройке диалогов установки и требуют танцев с бубном для выполнения хоть чуть нестандартных операций. Например 32-установщик ставящий на 64-битную систему две версии ПО (32/64) и соответственно пишущий в ветки реестра для 64-бит и для 32-бит. Копирующий dll как в папку «Program Files(x86)» так и в папку «Program Files». А uninstall должен это все еще и удалить.
Все инсталляторы которые я знаю дико неудобны и ограничены в настройке диалогов установки

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


Например 32-установщик ставящий на 64-битную систему две версии ПО (32/64) и соответственно пишущий в ветки реестра для 64-бит и для 32-бит. Копирующий dll как в папку «Program Files(x86)» так и в папку «Program Files». А uninstall должен это все еще и удалить.

Какой-такой бубен?
Там все достаточно просто. С реестром, например, все решается через .reg файлы и reg.
А в секцию удаления скрипта установки прописываются нужные действия для удаления того, что было сделано при установке. По крайней мере в NSIS оно так.
С копированием файлов в «Program Files(x86)» и «Program Files» вообще никаких проблем.

По поводу настроек это спорный вопрос про потребителя. Все зависит от целевой аудитории. У меня например аудитория ни разу не юзеры. Ибо софт специализированный. И вопрос не в сложных настройках а скорее в сложном поведении.
И тут мы плавно переходим к бубнам. Да все можно решить в инсталляторах, постаравшись. Но заполнение реестра не средствами инсталлятора а с помощью рег-файлов это уже костыль. Идеально было бы указать в конфигурации поля реестра которые надо заполнить и вуаля. Но нет надо самому например определять разрядность системы (не все инсталляторы делают это корректно) и прописывать действия взависимости от этого. И тут раз и исчезает разница между тратой времени на изучение какого нибудь NSIS и написанием собственного установщика на например C++/Qt где у тебя все под контролем.
По поводу удаления как реагирует инсталлятор на удаление файлов в чужой папке? Мне реально интересно. Так же обходит ли инсталлятор проблему изоляции Виндой 64-битной подсистемы? По умолчанию для 32-битного приложения «Program Files(x86)» и «Program Files» это одна папка. Как и соотвествующие ветки реестра. Обходить надо через WinApi.
В общем я давно разбирался в инсталляторах и не знаю их текущих возможностей — но понял затраты времени на их изучение не стоят того. Если разработчик сам пишет установщик то получится быстрее и проще. Исключения я указал в предыдущем комменте.
Зарегистрируйтесь на Хабре , чтобы оставить комментарий

Публикации

Истории