Инсталляция by NSIS

Михаил Продан, "Комиздат"


Рано или поздно любой программист сталкивается с проблемой создания дистрибутивов своего детища. Специально для решения этой проблемы в мире (и в Интернете в частности) существует ряд программ которые предназначены для решения этой проблемы. Сегодня речь пойдет, об одном представителе программ семейства инсталляторов – NSIS.


Инсталляторы – для чего они нужны


Давно прошли те времена, когда для работы с программой надо было всего лишь переписать ее в удобный для вас каталог и запустить. При этом не требовалось никакой дополнительной настройки системы и все работало как надо. Сегодня же объёмы программ разрослись до невероятных (по тем временам) мерок, а использование новых технологий привело к тому, что одна программа разбита на множество модулей, которые зачастую раскиданы по всему диску, а отсутствие одного из них непременно приводит к неправильному или полному прекращению функционирования программы.


Именно для того, чтоб правильно настроить систему и «разбросать» все файлы в нужные каталоги, компьютерное общество изобрело программы-инсталляторы.


Nullsoft Scriptable Install System


Или попросту NSIS – один из лучших представителей программ-инсталяторов. И не потому, что он создан всемирно известной группой Nullsoft (создатель WinAMP). А в первую очередь потому, что он – простой в использовании, быстрый, многофункциональный и бесплатный инсталлятор. Возможно этими свойствами обладает не один NSIS, к примеру всеми любимая Microsoft тоже сделала вклад в развитие бесплатных инсталляционных пакетов выставив на SourceForge.net исходники своего инсталлятора Windows Installer XML (WiX), но здесь стоит сказать, что этот пакет в обязательном порядке требует наличия на компьютере .NET Framework которым располагают не все программисты (в том числе и я). Еще одно замечание, которое можно отнести как к плюсам так и к минусам этой программы это использование в качестве базового формата программы формата XML. Чтоб все меня поняли приведу пример описания инсталляции программы описанный на языке WiX:



При использовании же пакета NSIS примерно то же описание будет выглядеть так:



И при этом после компиляции схемы NSIS мы получаем уже готовый модуль исполнения, а при использовании WiX – только объектный файл который потом надо еще раз обработать уже другим приложением.


Теоретические основы


Итак после небольшого вступительного слова перейдем к изучению основ NSIS. Для этого нам понадобится сам пакет NSIS 2.0. И небольшая программка, которую мы будем инсталлировать. Я для примера взял систему складского учёта для мест розничной торговли, которая для работы использует СУБД Firebird в качестве хранилища данных. Для ясности отмечу, что она использует механизм dbExpress для доступа к СУБД, и по этому кроме самого Firebird-a требует наличия в директории C:WindowsSystem файлов midas.dll и dbexpint.dll. Естественно на компьютере простого пользователя вряд ли найдутся такие файлы (если конечно он не устанавливал еще какие-то программы отечественных производителей), и их естественно необходимо включить в создаваемый дистрибютив.


Сам инсталляционный пакет создается на основе файла описания процесса инсталляции который имеет структуру показанную на рис.1.



В Главной секции этого файла записываются установки, которые являются неизменяемыми на протяжении всей инсталляции. Здесь объявляются:


Название проекта


Инсталляционная директория по умолчанию


Картинка, которая будет висеть в окне инсталляции


Общий вид и поведение окна инсталляции


Настройки показа лицензионных соглашений и др.


Секция страниц отвечает за список этапов которые будут отображаться в процессе инсталляции и деинсталяции приложения. Список этих страниц задается соответственно командами Page и UninstPage. Кроме того есть возможность расширенного контроля за отображением страниц с использованием команд PageEx и PageCallback.


Секция языков отвечает за объявления языков на каких будет проводится инсталляция, здесь возможна либо ручная настройка необходимых языков, либо автоматический подбор языка интерфейса из всех включенных в пакет языков.


Инсталляционная секция – это главная секция пакета. Здесь описываются все возможные варианты инсталляции, объявления файлов, команды для создания директорий и ключей реестра и другие всевозможные настройки. При объявлении секций инсталляции используются ключевые слова Section и SectionEnd между которыми и располагаются все другие команды. Естественно что в разных секциях должны располагаться разные, относительно независимые, компоненты (в нашем примере это собственно программа и СУБД Firebird). На основании этих данных инсталлятор даст возможность пользователю выбрать, какие именно компоненты надо установить(см. рис.2).



Кроме того, есть возможность объявления вложенных подсекций, которые будут вест

и себя на подобии составных объектов (к примеру установить только программу, а помощь не устанавливать и т.п.).


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


Деинсталяция – предназначена для описания работ проводимых программой при удалении вашего приложения с системы. Как и инсталляционный раздел деинсталяция также может иметь несколько подразделов в которых описывается процесс удаления разных компонентов приложения.


Практика


Для получения и закрепления практических навыков мы воспользуемся любым простым текстовым редактором который не вставляет разных символов форматирования в текст.


Исходный файл


В этом редакторе мы создадим файл "APM.nsi" в котором подробно изложим весь процесс инсталляции от начала и до конца.


Сперва запишем название нашего пакета а также файл в который будут записаны наша программа и сопутствующие ей документы. Здесь мы зададим инсталляционную директорию которая будет предложена по умолчанию, метод сжатия, которым будет обработан файл, а также вставим макросы которые задают вид страниц по умолчанию:



В раздел языков мы вставим макрос для поддержки русского языка:



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


В инсталляционной секции мы объявим две подсекции, которые будут отвечать соответственно за установку главной программы и СУБД, а также дополнительных модулей:



Здесь мы сперва задаем директорию в которую будут записаны все файлы объявленые после нее (команда SetOutDir). Теперь к этой директории можно обращаться через переменную $OUTDIR. Далее – отдаем приказ на копирование в инсталляционный пакет всех файлов находящихся в директории D:ProjectsDelphiProjectsFirebirdbin (обратите внимание, что система допускает использование символов wildcards, что значительно уменьшает код и выглядит более наглядно). Следующая строка записывает в директорию программу для деинсталяции приложения. Затем мы используем команду WriteRegStr для создания раздела нашей программы в системном реестре.


В следующей подсекции мы также устанавливаем директорию в которую будет проводится запись дополнительный программ. Далее выбираем файлы midas.dll и dbexpint.dll и помещаем их в пакет (при инсталляции они появятся в директории нашей программы). После этого мы записываем СУБД Firebird и по команде ExecWait запускаем ее и ждем ее окончания. В конце секции мы удаляем файл с СУБД из директрии нашей программы.


В раздел описаний мы поместим две строки, которые будут кратко характеризировать наши компоненты:



В результате мы получим текст изображенный на рис.3,4. Как видно из текста для присвоения этих описаний нашим секциям мы используем их имена заданные при объявлении соответствующих секций.




Последняя – секция деинсталяции. Эта секция будет выполнена только при запуске файла Uninstall.exe, который мы сформировали в разделе инсталляции. Суда мы записываем все команды по удалению файлов, директорий, и очистке реестра:



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


Компиляция


Так, файл инсталляции мы написали. Теперь же нам предстоит собрать из него экзешник. Для этого в составе пакета NSIS входят два приложения: makensis.exe и makensisw.exe. Первое – работает из командной строки и подойдет тем, кто пользуется для сборки своих приложений утилитой make или подобными ей. Второе – полноценное Windows – приложение.


Сборка нашего пакета происходит в считанные минуты. Мой пакет размером в 4Мб при использовании самого крутого LZMA сжатия собирался за 58,2с. При этом размер дистрибутива составил 4.65Мб, а при стандартной упаковке архива pkzip-ом с таким же содержимым результат составил – 4.73Мб.


Кроме этого компилятор позволяет выбирать между разными методами сжатия: zlib, bzip2, lzma. Есть также вариант автоматического выбора наилучшего упаковщика и использование упаковщика указанного в исходном файле.


Послесловие


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

Сохранить в соц. сетях:
Обсуждение:
comments powered by Disqus

Название реферата: Инсталляция by NSIS

Слов:1355
Символов:10641
Размер:20.78 Кб.