Інсталяція 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: \ Windows \ System файлів midas.dll і dbexpint.dll. Природно на комп'ютері простого користувача навряд чи знайдуться такі файли (якщо звичайно він не встановлював ще якісь програми вітчизняних виробників), і їх природно необхідно включити в створюваний дістрібютів.
Сам інсталяційний пакет створюється на основі файлу опису процесу інсталяції який має структуру показану на рис.1.
У Головній секції цього файлу записуються установки, які є незмінними протягом усього інсталяції. Тут оголошуються:
Інсталяційна директорія за замовчуванням
Картинка, яка буде висіти у вікні інсталяції
Загальний вигляд і поведінка вікна інсталяції
Налаштування показу ліцензійних угод і ін.
Секція сторінок відповідає за список етапів які будуть відображатися в процесі інсталяції і деінсталяції програми. Список цих сторінок задається відповідно командами Page і UninstPage. Крім того є можливість розширеного контролю за відображенням сторінок з використанням команд PageEx і PageCallback.
Розділ описів. У цьому розділі подаються описи всіх встановлюваних модулів, які будуть з'являтися в діалозі вибору компонентів інсталяції (див. Рис.2). Тут зокрема є можливість написання різних заголовків для різних мов, для різних секцій і різних підсекцій.
Дєїнсталяция - призначена для опису робіт, що проводив програмою при видаленні вашої програми з системи. Як і інсталяційний розділ дєїнсталяция також може мати кілька підрозділів в яких описується процес видалення різних компонентів програми.
Спершу запишемо назва нашого пакета а також файл в який будуть записані наша програма і супутні їй документи. Тут ми поставимо інсталяційну директорію яка буде запропонована за замовчуванням, метод стиснення, яким буде оброблений файл, а також вставимо макроси які задають вигляд сторінок за замовчуванням:
В розділ мов ми вставимо макрос для підтримки російської мови:
Крім російської, української, англійської мов пакет NSIS підтримує ще 37 мов далекого і ближнього зарубіжжя які входять в базову поставку і не вимагають додаткових витрат на скачування їх з інтернету.
У інсталяційною секції ми оголосимо дві підсекції, які будуть відповідати відповідно за установку головної програми і СУБД, а також додаткових модулів:
У наступній підсекції ми також встановлюємо директорію в яку буде проводиться запис додатковий програм. Далі вибираємо файли midas.dll і dbexpint.dll і поміщаємо їх в пакет (при інсталяції вони з'являться в директорії нашої програми). Після цього ми записуємо СУБД Firebird і по команді ExecWait запускаємо її і чекаємо її закінчення. В кінці секції ми видаляємо файл з СУБД з діректріі нашої програми.
В розділ описів ми помістимо два рядки, які будуть коротко характеризувати наші компоненти:
Остання - секція деінсталяціі. Ця секція буде виконана тільки при запуску файлу Uninstall.exe, який ми сформували в розділі інсталяції. Суду ми записуємо все команди з видалення файлів, директорій, і очищенні реєстру:
Тут також можна включити код, який би запустив і деинсталлятор для Firebird. Але ми не будемо цього робити свідомо. А раптом знадобиться.
Так, файл інсталяції ми написали. Тепер же нам належить зібрати з нього екзешник. Для цього в складі пакету NSIS входять два додатки: makensis.exe і makensisw.exe. Перше - працює з командного рядка і підійде тим, хто користується для складання своїх додатків утилітою make або подібними до неї. Друге - повноцінне Windows - додаток.
Збірка нашого пакета відбувається в лічені хвилини. Мій пакет розміром в 4Мб при використанні найкрутішого LZMA стиснення збирався за 58,2с. При цьому розмір дистрибутива склав 4.65Мб, а при стандартній упаковці архіву pkzip-му з таким же вмістом результат становив - 4.73Мб.
Крім цього компілятор дозволяє вибирати між різними методами стиснення: zlib, bzip2, lzma. Є також варіант автоматичного вибору найкращого пакувальника і використання пакувальника зазначеного в вихідному файлі.