Інсталяція by NSIS h2>
Михайло Продан, "Комиздат" p>
Рано
чи пізно будь-який програміст стикається з проблемою створення дистрибутивів
свого дітища. Спеціально для вирішення цієї проблеми в світі (і в Інтернеті
зокрема) існує ряд програм які призначені для вирішення цієї
проблеми. Сьогодні мова піде, про одного представника програм сімейства
інсталяторів - NSIS. p>
Інсталятори - для чого
вони потрібні h2>
Давно
пройшли ті часи, коли для роботи з програмою треба було всього лише
переписати її в зручний для вас каталог і запустити. При цьому не було потрібно
ніякої додаткової настройки системи і все працювало як треба. Сьогодні ж
обсяги програм розрослися до неймовірних (на ті часи) мірок, а
використання нових технологій призвело до того, що одна програма розбита на
безліч модулів, які найчастіше розкидані по всьому диску, а відсутність
одного з них неодмінно призводить до неправильного або повного припинення
функціонування програми. p>
Саме
для того, щоб правильно побудувати систему і «розкидати» всі файли в потрібні
каталоги, комп'ютерне товариство винайшло програми-інсталятори. p>
Nullsoft Scriptable
Install System h2>
Або
просто NSIS - один з кращих представників програм-інсталятор. І не
тому, що він створений всесвітньо відомою групою Nullsoft (творець WinAMP). А
в першу чергу тому, що він - простий у використанні, швидкий,
багатофункціональний і безкоштовний інсталятор. Можливо цими властивостями
має не один NSIS, наприклад всіма улюблена Microsoft також зробила внесок у
розвиток безкоштовних інсталяційних пакетів виставивши на SourceForge.net
исходники свого інсталятора Windows Installer XML (WiX), але тут варто
сказати, що цей пакет в обов'язковому порядку вимагає наявності на комп'ютері
. NET Framework яким володіють не всі програмісти (в тому числі і я). Ще
одне зауваження, яке можна віднести як до плюсів так і до мінусів цієї
програми це використання в якості базового формату програми формату XML.
Щоб усі мене зрозуміли наведу приклад опису інсталяції програми описаний на
мовою WiX: p>
p>
При
використанні ж пакету NSIS приблизно той же опис буде виглядати так: p>
p>
І
при цьому після компіляції схеми NSIS ми отримуємо вже готовий модуль виконання,
а при використанні WiX - тільки об'єктний файл який потім треба ще раз
обробити вже іншим додатком. p>
Теоретичні основи h2>
Отже
після невеликого вступного слова перейдемо до вивчення основ NSIS. Для цього
нам знадобиться сам пакет NSIS 2.0. І невелика програмка, яку ми будемо
інсталювати. Я для прикладу взяв систему складського обліку для місць роздрібної
торгівлі, яка для роботи використовує СУБД Firebird як сховище
даних. Для ясності зазначу, що вона використовує механізм dbExpress для доступу до
СУБД, і за цим крім самого Firebird-a вимагає наявності в директорії
C: WindowsSystem файлів midas.dll і dbexpint.dll. Природно на комп'ютері
простого користувача навряд чи знайдуться такі файли (якщо звичайно він не
встановлював ще якісь програми вітчизняних виробників), і їх
природно необхідно включити до створюваного дістрібютів. p>
Сам
інсталяційний пакет створюється на основі файлу опису процесу інсталяції
який має структуру показану на рис.1. p>
p>
В
Головною секції цього файлу записуються установки, які є
незмінними протягом всієї інсталяції. Тут оголошуються: p>
Назва проекту h2>
Інсталяційна
директорія за замовчуванням p>
Зображення,
яка буде висіти у вікні інсталяції p>
Загальний
вигляд і поведінку вікна інсталяції p>
Настройки
показу ліцензійних угод тощо p>
Секція
сторінок відповідає за список етапів які будуть відображатися в процесі
інсталяції і деінсталяціі програми. Список цих сторінок задається
відповідно командами Page і UninstPage. Крім того є можливість
розширеного контролю за відображенням сторінок з використанням команд PageEx і
PageCallback. p>
Секція
мов відповідає за оголошення мов на яких буде проводиться інсталяція,
тут можлива або ручне налаштування необхідних мов, або автоматичний
підбір мови інтерфейсу з усіх включених у пакет мов. p>
Інсталяційна
секція - це головна секція пакета. Тут описуються всі можливі варіанти
інсталяції, оголошення файлів, команди для створення директорій і ключів
реєстру і всілякі інші установки. При оголошенні секцій інсталяції
використовуються ключові слова Section і SectionEnd між якими і розташовуються
всі інші команди. Природно що в різних секціях повинні розташовуватися
різні, відносно незалежні, компоненти (у нашому прикладі це власне
програма і СУБД Firebird). На підставі цих даних інсталятор дасть
можливість користувачеві вибрати, які саме компоненти треба встановити (див.
рис.2). p>
p>
Крім
того, є можливість оголошення вкладених підсекцій, які будуть вести себе
на подобі складових об'єктів (наприклад встановити тільки програму, а допомога
не встановлювати і т.п.). p>
Розділ
описів. У цьому розділі подаються описи всіх модулів, що встановлюються,
які будуть з'являтися в діалозі вибору компонентів інсталяції (див. рис.2).
Тут зокрема є можливість написання різних заголовків для різних
мов, для різних секцій і різних підсекцій. p>
Деінсталяція
- Призначена для опису робіт, що проводив програмою при видаленні вашого застосування
з системи. Як і інсталяційний розділ деінсталяція також може мати
кілька підрозділів у яких описується процес видалення різних компонентів
додатки. p>
Практика h2>
Для
отримання та закріплення практичних навичок ми скористаємося будь-яким простим
текстовим редактором який не вставляє різних символів форматування в
текст. p>
Файл h2>
В
цьому редакторі ми створимо файл "APM.nsi" в якому детально викладемо
весь процес інсталяції від початку і до кінця. p>
Спершу
запишемо назву нашого пакета а також файл в який будуть записані наша
програма і супутні їй документи. Тут ми поставимо інсталяційну
директорію яка буде запропонована за замовчуванням, метод стиснення, яким буде
оброблений файл, а також вставимо макроси які задають вигляд сторінок по
замовчуванням: p>
p>
В
розділ мов ми вставимо макрос для підтримки російської мови: p>
p>
Крім
російської, української, англійської мов пакет NSIS підтримує ще 37 мов
далекого і ближнього зарубіжжя які входять в базову поставку і не вимагають
додаткових витрат на скачування їх з інтернету. p>
В
інсталяційної секції ми оголосимо дві підсекції, які будуть відповідати
відповідно за установку головної програми і СУБД, а також додаткових
модулів: p>
p>
Тут
ми спершу задаємо директорію в яку будуть записані всі файли оголошені після
неї (команда SetOutDir). Тепер до цієї директорії можна звертатися через
змінну $ OUTDIR. Далі - віддаємо наказ на копіювання в інсталяційний
пакет всі файли, що знаходяться в директорії
D: ProjectsDelphiProjectsFirebirdbin (зверніть увагу, що система
допускає використання символів wildcards, що значно зменшує код і
виглядає більш наочно). Наступний рядок записує в директорію програму
для деінсталяціі програми. Потім ми використовуємо команду WriteRegStr для
створення розділу нашої програми в системному реєстрі. p>
В
наступної підсекції ми також встановлюємо директорію в яку буде
проводиться запис додатковий програм. Далі вибираємо файли midas.dll і
dbexpint.dll і розміщуємо їх в пакет (при інсталяції вони з'являться в директорії
нашої програми). Після цього ми записуємо СУБД Firebird і по команді ExecWait
запускаємо її і чекаємо її закінчення. В кінці секції ми видаляємо файл із СУБД з
діректріі нашої програми. p>
В
розділ описів ми помістимо два рядки, які будуть коротко характеризувати
наші компоненти: p>
p>
В
результаті ми отримаємо текст зображений на рис.3, 4. Як видно з тексту для
привласнення цих описів нашим секціях ми використовуємо їх імена задані при оголошенні
відповідних секцій. p>
p>
p>
Остання
- Секція деінсталяціі. Ця секція буде виконана тільки при запуску файлу
Uninstall.exe, який ми сформували в розділі інсталяції. Суду ми
записуємо всі команди з видалення файлів, директорій, і очищення реєстру: p>
p>
Тут
можна також включити код, який би запустив і Деінсталятор для Firebird. Але
ми не будемо цього робити свідомо. А раптом знадобиться. p>
Компіляція h2>
Так,
файл інсталяції ми написали. Тепер же нам належить зібрати з нього екзешнік.
Для цього у складі пакета NSIS входять дві програми: makensis.exe і
makensisw.exe. Перше - працює з командного рядка і підійде тим, хто
користується для складання своїх додатків утилітою make або подібними до неї. Друге --
повноцінне Windows - додаток. p>
Збірка
нашого пакета відбувається за лічені хвилини. Мій пакет розміром в 4Мб при
використанні самого крутого LZMA стиснення збирався за 58,2 с. При цьому розмір
дистрибутива склав 4.65Мб, а при стандартній упаковці архіву pkzip-му з
таким же вмістом результат склав - 4.73Мб. p>
Крім
цього компілятор дозволяє вибирати між різними методами стиснення: zlib, bzip2,
lzma. Є також варіант автоматичного вибору найкращого пакувальника та
використання пакувальника зазначеного у вихідному файлі. p>
Післямова h2>
Використання
програм-інсталяторів сьогодні - це вже не данина моді, а часом єдина
можливість донести своє творіння до кінцевого користувача. У цій категорії
програмного забезпечення одним з найбільш простих і зрозумілих в роботі є
заснований на безкоштовній GNU ліцензії пакет NSIS який пропонує масу
різних способів встановити програму на клієнтську машину. А застосування при його
створення полігонів дозволяє ще більше розсунути межі його застосування. p>
Список літератури h2>
Для
підготовки даної роботи були використані матеріали з сайту http://www.citforum.ru/
p>