Даю установку... Часть 2

Вторая часть нашего обзора (начало см. в «МБ» №26’2006) посвящена более мощным инструментам для создания установочных пакетов — так называемым скриптовым инсталляторам (подробнее о классификации было рассказано в первой части).

InnoSetup
Позвольте представить вам InnoSetup – профессиональный инструмент скриптового типа для создания инсталляторов. Программа – англоязычная, имеет подробнейшую справку (тоже на английском). При запуске Inno Setup перед нами предстает... скромный текстовый редактор. А чего вы хотели? Это ведь скриптовый инсталлятор. Впрочем, не все так плохо. Скрипты Inno Setup достаточно хорошо структурированы, и разобраться в них довольно просто. Для ознакомления с возможностями этой программы рекомендую просмотреть имеющиеся в дистрибутиве примеры.

Если же вы хотите создать установщик не очень сложный, можно воспользоваться Мастером. В ходе работы Мастер задаст вам несколько вопросов – и в итоге сгенерирует сценарий, который можно будет незамедлительно откомпилировать (или отредактировать).
Для того, чтобы понять принципы написания скриптов, давайте рассмотрим простейший пример (Example1.iss).

;Раздел отвечает за параметры инсталлятора, компрессию, а также техническую информацию о программе
[Setup]

;Название приложения = Моя программа
AppName=My Program
;Версия приложения = Моя программа. Версия 1.5
AppVerName=My Program version 1.5
;Каталог установки программы по умолчанию = {Program Files}\Моя программа
DefaultDirName={pf}\My Program
;Название группы ярлыков в главном меню = Моя программа
DefaultGroupName=My Program
;Иконка деинсталлятора = {название приложения}\программа.exe
UninstallDisplayIcon={app}\MyProg.exe
;Тип применяемого компрессора = zip/степень сжатия - 9
Compression=zip/9
;Непрерывное сжатие = да
SolidCompression=yes

;Раздел отвечает за установку файлов программы
[Files]

;Источник: "Файл «MyProg.exe»"; Место назначения: "{папка приложения}"
Source: "MyProg.exe"; DestDir: "{app}"

;Источник: "файл «ReadMe.txt»"; Место назначения: "{папка приложения}"; Метка: предложить для прочтения;
Source: "Readme.txt"; DestDir: "{app}"; Flags: isreadme

;Раздел отвечает за создание ярлыков
[Icons]

;Имя ярлыка:{группа программы}\Моя программа; Путь к Файлу: {папка приложения \ программа.exe}
Name: "{group}\My Program"; Filename: "{app}\MyProg.exe"

В этом примере рассмотрены базовые возможности трех основных секций скрипта. Однако на самом деле секций гораздо больше (как и возможностей).
Кроме всего прочего, InnoSetup умеет работать с Pascal-скриптами. А это не только работа с процедурами и функциями dll-библиотек, но и оперирование внушительным количеством классических компонентов. Создав небольшую форму, которую должен заполнить пользователь при установке программы, вы можете сразу передать эту информацию в реестр или конфигурационный файл. Поддерживаются функции работы с файловой системой, отображения диалогов, сбора информации о системе, регистрации библиотек, математических операций.
Вот такой набор функций предоставляет нам InnoSetup. Настраивается практически все – от внешнего вида инсталлятора до параметров копирования файлов. Установочный пакет можно разбить на тома произвольного размера, что очень удобно при распространении программы в Интернете (скачивать инсталлятор по частям намного удобнее). Используя дополнительную библиотеку с сайта автора, можно создавать шифрованные дистрибутивы.
Получаемый инсталлятор удобен во всех отношениях. Его внешний вид полностью настраивается, опции установки грамотно распределены по тематическим страницам инсталлятора. Важно отметить и возможность выбора языка перед началом установки. Извлечение файлов проходит ровно, без скачков и зависаний. Инсталлятор хорошо работает с маленькими файлами – 600 текстовых документов по 2-3 Кбайт извлеклись за 10 секунд. Деинсталлятор тоже справился на ура — все файлы были удалены за 3 секунды. Вот только размер установочного модуля слишком велик — порядка 660 Кбайт (впрочем, при компиляции он неплохо ужимается).
Краткие итоги:
+ подсветка синтаксиса в редакторе;
+ подробная справка;
+ конструктор скриптов;
+ сопровождение примерами.
– большой установочный модуль.

Nullsoft Scriptable Installation System
До боли знакомые инсталляторы Winamp`а, кодека XviD и программы Light Allow сделаны именно в NSIS. А чем мы хуже других?
Данная программа предлагает два инструмента для создания инсталляторов. Вызвать их можно через утилиту NSIS Menu (страница Quick Launch > Utilities). Первый инструмент носит название Zip2Exe – это скоростной конвертер zip-архивов в sfx-пакеты. Можно выбрать только компрессор и путь установки. В итоге мы получаем мини-инсталлятор, который позволяет лишь задать каталог установки программы. Для несложных проектов достаточно и этого.

Make NSISW – второй, главный инструмент для создания инсталляторов. Как раз с ним мы и будем работать. Главное отличие NSIS от InnoSetup – «ручной» способ сборки сценария инсталлятора из небольших логических кусочков, лежащих в папке NSIS>Examples. Cкрипт можно писать в многооконном текстовом редакторе, а в Make NSISW – компилировать проект.
Для примера откроем в блокноте скрипт Example1.nsi Все строки, перед которыми стоит знак “;” являются комментариями – компилятор их не обрабатывает. Рассмотрим его содержание.

; Название программы "Program"
Name "Program"

; Имя файла инсталлятора "setup.exe"
OutFile "setup.exe"

; Каталог установки Program Files\Program
InstallDir $PROGRAMFILES\Program

; Отображение страницы выбора каталога установки
Page directory

; Отображение страницы извлечения файлов
Page instfiles

; В этом разделе задаются настройки, которые необходимо учесть при запуске инсталлятора со строковыми параметрами. В нашем случае он пустой. Секций можно создать несколько, например, для параметров "-hide", "-quick". Настройки раздела закрываются тэгом SectionEnd.
Section ""
; Создание папки установки, если она не существует
SetOutPath $INSTDIR

; Файлы, входящие в установку
File C:\program\program.exe //первый файл
File C:\program\help.hlp //второй файл

; Команда закрывает секцию с пустым параметром.
; Если задается неизвестный параметр, он игнорируется.
SectionEnd

Скрипты NSIS, по сравнению с InnoSetup, организованы более хаотично – тематические разделы и секции отсутствуют как вид, что несколько затрудняет конструирование инсталлятора. Теме более, что встроенный редактор с подсветкой синтаксиса в программе отсутствует. Однако, несмотря на свое крайнее неудобство, NSIS – очень мощный и функциональный инструмент. Программа умеет создавать инсталляторы с возможностью выбора языка установки (поддерживается 49 языков), работать с dll-библиотеками, типами установки (с возможностью выбора компонентов), формами и системными переменными. Поддерживается три компрессора – zlib, bzip2 и lzma. Самую быструю упаковку и распаковку обеспечивает zlib – по степени сжатия он напоминает zip. Более тщательно сжимает bzip – но скорость распаковки оставляет желать лучшего. Самый мощный компрессор – lzma. Но упаковка им идет медленно, распаковка – средне. Очень большое внимание уделяется настройкам интерфейса инсталлятора – можно сопроводить установку звуками, задать SplashScreen, настроить фоновые картинки и оформление инсталлятора. NSIS создает инсталляторы с самым маленьким установочным модулем – всего 34 Кбайт.
Программа снабжена англоязычной справкой (на мой взгляд – столь же неудобной, как и сама программа). К сожалению, все сводится к простому описанию команд и функций, а как и где их применять – разработчики не говорят. Ориентироваться приходится на примеры, которые хоть как-то иллюстрируют функции инсталляторов. Благо примеры снабжены пояснениями. Таким образом, NSIS – это очень мощная, но крайне неудобная программа.
Для облегчения работы с программой вы можете воспользоваться редактором NSIS Script Editor, скачать который можно на сайте www.labour-saving.com. Из опций – создание небольшого шаблона скрипта с помощью мастера, подсветка синтаксиса и считывание информации о системе. В дистрибутив программы встроена утилита iss2nsi – конвертер скриптов из формата InnoSetup в формат NSIS. Забавная вещь, надо заметить. К сожалению, NSIS Script Editor – программа платная (Trial, 10 запусков), зато разговаривает она на русском.
Краткие итоги:
+ возможность создавать свой интерфейс инсталлятора;
+ работа с графикой, мультимедиа;
+ высокая функциональность;
– неудобство в использовании.
– относительно сложный язык скриптов.

Agentix Installer
Еще один неплохой инструмент для создания инсталляторов с приличным набором опций и функций (хотя до того же InnoSetup ему далековато). Пользователю предоставляется лишь консоль Agentix Installer, но пусть вас это не пугает – на сайте разработчика можно (и нужно) скачать программу AGisBuilder – официальную GUI‑оболочку для Agentix Installer. Это спасет вас от изучения увесистой документации, а при желании вы всегда сможете подправить сгенерированные скрипт вручную.

Получаемый инсталлятор очень прост и ограничивается несколькими диалогами (выбор языка, директории установки и создания ярлыков). Плюс окна текста лицензии и ReadMe. Программа использует компрессор zlib – быстрый и не ресурсоемкий, с неплохой степенью сжатия. А вот деинсталлятор иногда ведет себя довольно странно — после удаления остается несколько файлов, которые предлагается удалить вручную.
Такой инсталлятор подойдет для несложных проектов, где требуется самый необходимый минимум функций. Размер установочного модуля – 40 Кбайт.
Как было сказано выше, программа является консольной и распространяется с надстройкой AGisBuilder (скачивается отдельно). Текущая версия оболочки англоязычна, но вполне удобна и понятна. Agentix Installer снабжен хорошей справкой, которая включает в себя описание всех консольных команд.
Краткие итоги:
+ красивый интерфейс инсталлятора;
+ простота в использовании.
– один компрессор;
– платность.

Ghost Installer Studio (Demo)
Ghost Installer – достаточно функциональный, но ужасно неудобный инструмент. Первое, что раздражает в программе – непомерная ресурсоемкость. На Sempron 2200 с 256 Мбайт оперативной памяти на борту Ghost Installer отчаянно тормозил, загружая систему. Причины такого поведения программы остаются загадкой. Второй и, пожалуй, главный недостаток программы – неграмотная организация интерфейса. Параметры и настройки инсталлятора сгруппированы в меню очень неудобно, а некоторые этапы сборки скрипта вообще не поддаются логике. Но приставка Studio в названии Ghost Installer себя оправдывает – несмотря на такие серьезные недостатки, инструмент это мощный.

Ghost Installer использует язык XML, структура которого предполагает строгую организацию и соподчинение классов, поэтому любые неточности в синтаксисе сразу же отразятся на результате. Параметры инсталлятора задаются с помощью группы тэгов, относящихся к той или иной категории настроек. Они, в свою очередь, заключены в парные тэги более высокого уровня, что помогает сохранить иерархию скрипта.
В программу входит инструмент gEditor – простой редактор скриптов с подсветкой синтаксиса (который только и умеет, что вставлять тэги и запускать компилятор), и gDesigner IDE – визуальный конструктор инсталляторов. Именно с ним мы и будем работать.
После запуска gDesigner IDE открывает менеджер проектов, который состоит из четырех вкладок. Две из них нас не интересуют – они отвечают за открытие последних файлов и сохраненных проектов. А вот вкладка «Templates» позволяет использовать для нашего инсталлятора один из шести шаблонов скрипта. Большой разницы между ними замечено не было, а основные отличия заключались в компоновке требований к системе и подключаемых инсталлятором библиотек. Самым оптимальным шаблоном для стандартной программы является «Simple Project». При его выборе в программу загрузится стандартный проект с настройками по умолчанию. Но его мы рассмотрим позднее. Вторая интересующая нас вкладка – «Wizards». В ней находится ярлык для запуска «Project Wizard» (Мастера создания скриптов), а также ярлыки для создания скриптов на основе программного кода приложения. Алгоритм прост – выбирается файл проекта какого-либо приложения, написанного на распространенном языке программирования (поддерживаются Visual C++, Visual Basic, Borland C++ и Borland Delphi), программа анализирует его и создает скрипт, в поле «Application name» которого стоит название выбранной программы. Никакой иной пользы от этой функции нет. По всей видимости, она еще находится в стадии разработки. Видимо, в следующих версиях программы из исходника проекта будет считываться и другая информация о программе (версия, набор используемых компонентов и др.).
Полученный инсталлятор вполне удобен и симпатичен. Его недостаток – медленность работы при установке файлов. Причем размер установочного модуля переходит все границы – 400 Кбайт. Такой инсталлятор точно не подойдет для маленьких программ. Деинсталлятор удаляет файлы быстро, всего за два шага. Кроме этого, он позволяет не только удалить приложение, но и восстановить его, или добавить/удалить компоненты.
В целом – весьма неплохой инсталлятор, интерфейс которого можно создать самому.
Ghost Installer имеет хорошую англоязычную справку, где на примерах расписан процесс создания инсталлятора. Пугают высокая цена программы и ее сравнительная сложность. Однако и такие затраты могут себя оправдать.
Краткие итоги:
+ работа с диалогами;
+ функциональный деинсталлятор.
– громоздкость;
– высокая цена.

Заключение
На этом мы заканчиваем обзор скриптовых инсталляторов; остается только подвести итог. InnoSetup подойдет как новичку, так и профессионалу, сочетая в себе функциональность и простоту. Простой язык скриптов, удобный мастер и огромное количество настроек – заслуженное первого места.

NSIS не отстает в плане функциональности, но неудобство в использовании откровенно ее подводит.
Agentix Installer подойдет ленивым (или, если угодно, практичным) пользователям, которым не хочется разбираться в настройках программы, читая документацию. Во всяком случае, джентльменский набор программа предоставляет, а для небольших проектов будет достаточно и этого.
А Ghost Installer рядовому пользователю вряд ли подойдет – оттолкнут излишняя громоздкость и высокая цена.


Рекомендуем почитать: