Рано или поздно любой программист сталкивается с проблемой создания дистрибутивов своего детища. Специально для решения этой проблемы в мире (и в Интернете в частности) существует ряд программ которые предназначены для решения этой проблемы. Сегодня речь пойдет, об одном представителе программ семейства инсталляторов – 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:\Windows\System файлов midas.dll и dbexpint.dll. Естественно на компьютере простого пользователя вряд ли найдутся такие файлы (если конечно он не устанавливал еще какие-то программы отечественных производителей), и их естественно необходимо включить в создаваемый дистрибютив.
Сам инсталляционный пакет создается на основе файла описания процесса инсталляции который имеет структуру показанную на рис.1.
Похожий материал - Статья: OpenGL и Delphi на практике

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

Вам будет интересно - Статья: Производные Классы
Кроме того, есть возможность объявления вложенных подсекций, которые будут вести себя на подобии составных объектов (к примеру установить только программу, а помощь не устанавливать и т.п.).
Раздел описаний. В этом разделе подаются описания всех устанавливаемых модулей, которые будут появляться в диалоге выбора компонентов инсталляции (см. рис.2). Здесь в частности имеется возможность написания разных заголовков для разных языков, для разных секций и разных подсекций.
Деинсталяция – предназначена для описания работ проводимых программой при удалении вашего приложения с системы. Как и инсталляционный раздел деинсталяция также может иметь несколько подразделов в которых описывается процесс удаления разных компонентов приложения.
Практика
Для получения и закрепления практических навыков мы воспользуемся любым простым текстовым редактором который не вставляет разных символов форматирования в текст.
Исходный файл
В этом редакторе мы создадим файл "APM.nsi" в котором подробно изложим весь процесс инсталляции от начала и до конца.
Похожий материал - Статья: Добавление к Классу
Сперва запишем название нашего пакета а также файл в который будут записаны наша программа и сопутствующие ей документы. Здесь мы зададим инсталляционную директорию которая будет предложена по умолчанию, метод сжатия, которым будет обработан файл, а также вставим макросы которые задают вид страниц по умолчанию:

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