На заметку разработчику

Создание дистрибутивов ПО для Windows: InnoSetup и NSIS


История проблемы

Был DOS, и проблемы этой не было. Каждая из программ умещалась на дискете, а что побольше - на двух, и только монстры - на трёх и более. Была папка c:\work, были Norton Commander и DOS Navigator, и каждая из программ копировалась с дискеты на винчестер по F5, а если винчестер был маленьким (меньше 20 Мб), то так на дискете и оставалась. И всё было хорошо, и всё работало.

Но вот появился Macintosh. И все сразу закричали: "хотим GUI1!!!". И создатель ДОС'а, компания Microsoft, занялась разработкой того самого GUI. Так мир увидел первую версию Windows. Это не было шедевром, и многие морщились. Но всё равно использовали, потому что командная строка была менее удобной для секретарш и клерков. А ведь именно они задают моду на интерфейс.

Windows 3.0, а после и 3.1, принесли с собой свежее дыхание в мир персональных компьютеров. Многие разработчики кинулись переделывать свои программы под эту платформу. И много новых продуктов было написано, очень даже хороших и замечательных. Только их по-прежнему надо было копировать с дискеты на винчестер (хотя теперь это можно сделать и мышью). А ведь уже тогда появились многие технологии, под ДОС'ом недоступные, - такие, как OLE и DDE, например. И приходилось пользователю самому все нужные файлы по нужным папкам распихивать: этот - в системную папку, этот - в программы, а этот - на рабочий стол для удобства...

С выходом Windows 95 ситуация только ухудшилась. Технологий стало больше, к тому же появился системный реестр, где рекомендовалось хранить все важные данные. И тут уж пользователям приходилось совсем несладко, что и было поводом для бесконечных обращений в службы поддержки. Чтобы как-то сократить расходы на поддержку продукта, многие компании стали снабжать свои программы специальными инструментами автоматической установки, получившими название инсталляторов (от английского install - устанавливать; монтировать; собирать; располагать; размещать; вводить в действие).

Сказать, что большая часть этих программ была кривой - значит, не сказать ничего. Многие из них были способны просто уложить на обе лопатки систему, и без того не слишком стабильную, или навести хаос на рабочем столе и в документах пользователя. Поэтому долгое время слово "инсталлятор" было чуть ли не ругательным.


А есть ли проблема?

Но это, как известно, история. Сегодня любая программа - от солидных пакетов типа Photoshop до утилиты чистки кэша Internet Explorer'а от Vasya Pupkin Corporation - имеют собственный инсталлятор. Многим продуктам он, в общем-то, без особой надобности, но в наше время это уже просто правило хорошего тона.

Пользователи тоже привыкли программы устанавливать с помощью этих самых инсталляторов, а в системе имеется собственный сервис для удаления установленных программ. Всё, казалось бы, хорошо. Зачем тогда писать эту статью?

Действительно, со времён Windows 3.1 положение улучшилось. Но если бы проблемы не было, зачем были бы нужны программы типа Your Uninstaller или Absolute Uninstaller? Почему на сайтах для программистов выложены десятки программ для создания инсталляционных пакетов и почему продолжают создаваться всё новые? Почему разработчик WinRAR'а Александр Рошал не пользуется ими, а делает свой собственный инсталлятор для WinRAR'а? Как видите, эти вопросы подтверждают, что проблема имеется, и создание качественного дистрибутива - вопрос не такой и простой. Если вам кажется, что я раздуваю из мухи слона, спросите пользователей своего продукта: важен ли для них инсталлятор? Лично я уже знаю ответ.

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

Нет, конечно же, всё не так уж и плохо. Есть много замечательных программ для создания дистрибутивов. Например, многие разработчики программного обеспечения пользуются InstallShield'ом. Но он несколько дороговат для многих из тех, кто использует лицензионные копии ПО, а дистрибутивы, создаваемые с его помощью, не слишком подходят для программ менее 10 Мб, распространяемых через интернет, т.к. сам InstallShield добавляет к ним не менее полутора своих мегабайтов. Мне очень хорошо запомнилась однажды скачанная мною с download.com утилита для создания BAT-файлов. Размер самой программы был около 300 Кб, зато дистрибутив, сделанный, конечно же, всё тем же InstallShield'ом, "весил" почти 3 Мб.

Есть менее массивные решения, более подходящие для не слишком больших по объёму утилит, распространяемых через всемирную паутину. О двух из них я сейчас расскажу. Это NSIS и InnoSetup. Почему именно эти два? Когда я подбирал инсталлятор для одного из своих продуктов (архиватора), то посмотрел множество программ: от взломанного навороченного InstallShield Developer'а до предельно простого Setup Generator'а (www.gentee.com). Но остановился на InnoSetup. Потом, немного поднаторев в этом деле, стал обращать внимание, что очень многие дистрибутивы (даже, я бы сказал, большинство) созданы именно с помощью этих двух инструментов. Кроме того, обе программы, о которых пойдёт разговор, бесплатны, и даже более того - open-source!


Решение первое: InnoSetup

Первые релизы этой программы относятся, по слухам, к 1996 году. Тогда InnoSetup был разработан ещё для Windows 3.1, но уже в версии 2.0 (1997 год) поддерживал только 32-битные Windows-платформы. На сегодняшний момент актуальна версия 5.0, её можно скачать с сайта разработчика (www.jrsoftware.org).

Какие возможности эта программа предоставляет пользователю? Во-первых, она работает под всеми 32-битными версиями Windows: 95, 98, 2000, 2003, XP, Me, NT 4.0 (SP6). Полученные дистрибутивы могут быть упакованы в один EXE-файл, а могут быть разбиты на несколько частей. Встроено сжатие файлов алгоритмами ZIP, BZIP2 и LZMA (последний используется в 7Zip - самом эффективном архиваторе), присутствует поддержка "непрерывной" компрессии. Инсталлятор может автоматически включать деинсталлятор, перезаписывать запущенные программы, регистрировать библиотеки типов и компоненты COM, устанавливать шрифты. Если пользователь нажмёт "Отмена" в процессе копирования файлов на диск, то инсталлятор сам выполнит "rollback", т.е. откат всех изменений. Поддерживаются многоязычные дистрибутивы, где язык может выбрать сам пользователь (и переводов уже сделано немало, прошу заметить). Ну, а главная "фишка" InnoSetup - встроенный скриптовый движок паскальподобного языка, с помощью которого можно сделать с инсталлятором практически всё: добавить или убрать какой-либо диалог в процессе инсталляции, сделать проверку серийного номера, вызвать функцию из внешней DLL-библиотеки. Этот скриптовый движок обладает поистине уникальными возможностями: объектно-ориентированные скрипты (классы, как в Delphi), работа с серверами OLE-автоматизации (например, Word, MSXML, SQL Server), множество встроенных функций. В общем-то, он может даже потягаться с InstallScript из InstallShiled'а. Хотя размер дистрибутива, генерируемого InnoSetup, всего на 200-250 Кб больше размера архива с приложением (сравните с InstallShield'овскими мегабайтами!).

На вид InnoSetup неказист. Вы видите его на скриншоте: просто текстовый редактор скрипта. А скрипт InnoSetup (не путайте его со скриптом встроенного скриптового движка!) похож на INI-файл. Если нет желания писать этот самый скрипт вручную, скачайте с www.istool.org утилиту ISTool, которая представляет собой полезное дополнение к InnoSetup - визуальный редактор скриптов, с помощью которого можно создавать инсталляции, используя только мышь. Кроме ISTool, существует ещё InnoSetup Form Designer (ISFD): программа визуального редактирования нестандартных диалогов для инсталляторов, создаваемых с помощью InnoSetup. Скачать ISFD можно с сайта isfd.kaju74.de.

Вид у инсталляторов, созданных с InnoSetup, вполне профессиональный. Многие белорусские программы (CityInfo, Belazar) используют InnoSetup. Ксати, с сайта Олега Азаровского, автора русско-белорусского и белорусско-русского переводчика Belazar, можно скачать белорусскую локализацию дистрибутивов для Inno Setup (качаем по адресу belsoft.tut.by).


Решение второе: NSIS

Полное название второго продукта для создания инсталляций, который я хочу предложить вашему вниманию - Nullsoft Scriptable Installation System, аббревиатура - NSIS. Делала его знаменитая фирма Nullsoft, создатель WinAmp'а. Кстати, NSIS был разработан именно для создания дистрибутивов для этого плеера. Но продукт получился хорошим, поэтому уже много лет он доступен для скачивания по этому адресу: www.nullsoft.com/free/nsis.

Возможности этого инструмента почти целиком повторяют аналогичные для InnoSetup. Сходство не только в этом: как и InnoSetup, NSIS использует специальные скрипты для описания инсталляции. Только они, на мой взгляд, имеют несколько более сложный синтаксис, чем у InnoSetup. Запускать сборщик дистрибутивов по замыслу авторов нужно из командной строки, но, конечно же, существуют утилиты для визуального редактирования инсталляционных скриптов. Две из них (Venis X и NSEdit) доступны прямо на сайте разработчиков самого NSIS.

Чем отличается NSIS от InnoSetup? Во-первых, меньшим размером добавляемых модулей инсталлятора (~80-150 Кб). Во-вторых, инсталлятор, созданный с помощью NSIS, будет иметь красивую круглую иконку, а не стандартный сине-зелёный значок компьютера. В-третьих, у NSIS нет встроенного скриптового движка, зато к нему есть куча плагинов, часть из которых включена в дистрибутив самого NSIS'а.


Что же выбрать?

На мой взгляд, и NSIS, и InnoSetup - вполне достойные продукты, и это подтверждается их популярностью среди разработчиков программного обеспечения. В любом случае, и то, и другое лучше, чем InstallShield, хотя бы даже в силу наличия огромного числа локализаций. Вопрос же, что выбрать: NSIS или InnoSetup, является, скорее, делом вкуса. Это, я бы даже сказал, вопрос доверия. Скачайте оба продукта, поизучайте их и посмотрите, кому вы больше доверяете: немецкому программисту по имени Jordan Russell, который создал InnoSetup, или фирме Nullsoft, которая разработала NSIS.

В любом случае, главное правило, которое нужно соблюдать: не стоит вкладывать с инсталлятор столько же сил, сколько и в тот продукт, который он устанавливает. И NSIS, и InnoSetup - превосходные помощники разработчика, который следует этому правилу.

(Продолжение следует)

Вадим СТАНКЕВИЧ

1 GUI - Graphical User's Interface, графический интерфейс пользователя

Версия для печатиВерсия для печати

Номер: 

11 за 2006 год

Рубрика: 

Software
Заметили ошибку? Выделите ее мышкой и нажмите Ctrl+Enter!

Комментарии

Аватар пользователя Kostak
Изменение иконки инсталятора в InnoSetup:

SetupIconFile=MyInstaller.ico

Аватар пользователя Вадим Станкевич
Только не для Win98/ME! Там надо ResouceHacker'ом.
Аватар пользователя Котяра
Перезагрузка ПК в Inno Setup:

AlwaysRestart=yes

Аватар пользователя Котяра
Перезагрузка ПК после удаления:

UninstallRestartComputer=yes