CFA LogoCFA Logo Computer
Новости Статьи Магазин Драйвера Контакты
Новости
RSS канал новостей
В конце марта компания ASRock анонсировала фирменную линейку графических ускорителей Phantom Gaming. ...
Компания Huawei продолжает заниматься расширением фирменной линейки смартфонов Y Series. Очередное ...
Компания Antec в своем очередном пресс-релизе анонсировала поставки фирменной серии блоков питания ...
Компания Thermalright отчиталась о готовности нового высокопроизводительного процессорного кулера ...
Компания Biostar сообщает в официальном пресс-релизе о готовности флагманской материнской платы ...
Самое интересное
Программаторы 25 SPI FLASH Адаптеры Optibay HDD Caddy Драйвера nVidia GeForce Драйвера AMD Radeon HD Игры на DVD Сравнение видеокарт Сравнение процессоров

АРХИВ СТАТЕЙ ЖУРНАЛА «МОЙ КОМПЬЮТЕР» ЗА 2003 ГОД

Генератор-инсталлятор

(c)Петр 'Roxton' СЕМИЛЕТОВ tea@list.ru

Компания Nullsoft славна не только своим Winamp’ом, но еще и утилитой, предназначенной для гибкого создания инсталляторов. А называется эта утилита коротко —NSIS. О ней я и расскажу.

Три года назад, когда я выпустил первую версию своего редактора TEA, мне пришлось довольно долго подыскивать пристойный генератор инсталляторов (далее ГИ). Перепробовал много разных, от Install Shield до... Уже и не помню, кажется, штук десять протестировал. Делал так: один и тот же дистрибутив паковал разными ГИ и смотрел, какого размера он получается.

Опробовал я всех этих коммерческих монстров, выбрал какой-то мелкий и шароварный, какое-то время с ним повозился, пока не наткнулся на NSIS. И начал использовать его сам и советовать всем знакомым, а о других ГИ даже слушать не хотел.

NSIS расшифровывается как «Nullsoft Scriptable Installation System». То есть, перед нами скриптовая инсталляционная система. Это значит, что для создания инсталлятора придется писать скрипты. Впрочем, плох тот программист, который боится такой работы. Только скрипты позволяют сделать максимально гибкий инсталлятор.

В этой статье я не буду касаться всех аспектов написания скриптов для NSIS. Я лишь поведаю, как создать простой инсталлятор некоего гипотетического продукта. Полное описания языка скриптов и примеры на нем же входят в стандартную поставку NSIS, дистрибутив которого можно скачать с http://www.nullsoft.com/free/nsis/.

Надо заметить, что NSIS полностью бесплатен. Более того, он поставляется с исходниками. Я ничего не имею против его замечательного конкурента, InnoSetup (http://www.jrsoftware.org), однако NSIS обеспечивает меньший размер дистрибутива, потому что «надстройка» над дистрибутивом от Inno весит больше, чем у NSIS. NSIS же накидывает от 20 до 40 Кб, в зависимости от сложности инсталлятора. Впрочем, эта статья не об InnoSetup :-).

Разбирать что-либо всегда проще на работающем примере, исходнике. В качестве нашего «гипотетического проекта» выберем скрипт инсталлятора моей интернет-звонилки (см. пререлиз на http://www.roxton.kiev.ua). Скрипт этот прост и очень нагляден. Вместе с тем за пару минут вы можете переиначить его под свой проект.

Сначала приведу весь листинг:

Теперь комментарии:

CRCCheck on — этим мы включаем проверку CRC. Если ваш инсталлятор кто-то скачает, и скачанный дистрибутив получится «битый», то благодаря проверке CRC инсталлятор сообщит пользователю, что файл дистрибутива поврежден, и кривые руки не у вас, а просто так получилось :-). По умолчанию проверка CRC выключена.

SetCompressor bzip2 — устанавливаем алгоритм компрессии. По умолчанию это обычный ZIP, однако BZIP2 обеспечивает ощутимо большую степень сжатия. Правда, несколько в ущерб скорости распаковки, но это будет заметно только на больших, в несколько десятков или сотен мегабайт, дистрибутивах.

InstallColors 061C79 E5F0E2 — цвета информационного окна, которое отображается, например, когда надо вывести детали о ходе инсталляции. Значения цветов задаются в шестнадцатеричном виде, в формате RRGGBB. То есть как в HTML. В параметрах сначала идет цвет переднего плана, потом — заднего.

LicenseBkColor E5F0E2 — фоновый цвет для окна лицензии.

InstProgressFlags smooth colored — во-первых, индикатор прогресса будет у нас сплошной (за что отвечает опция smooth), а не сегментированный (как по умолчанию). А во-вторых, он будет цветной, за что ответственна опция colored.

LicenseText "Лицензионное соглашение" "Хорошо!" — на соответствующей странице задает надпись над текстом лицензии и надпись на кнопке, нажав на которую, пользователь согласится с лицензией. У нас на кнопке будет написано «Хорошо!»

LicenseData "zvonlic.txt" — имя файла с лицензией. Может быть в обычном текстовом формате, а может в RTF. Первое, разумеется, займет меньше места, но второе можно сделать красивее :-).

UninstallText "Удаление Звонилки. Еще не поздно отказаться ;)" — задает текст, который будет выведен деинсталлятором для подтверждения удаления вашего продукта.

ShowInstDetails show — если включено show, то после установки файлов будет выведена информация, куда и что скопировано. Юзер увидит это, и его не будут мучить опасения, что ваша программа полезла куда-то не туда.

CompletedText "Выполнено!" — текст, который сообщит пользователю, что инсталляция выполнена.

OutFile "zv_setup.exe" — задает имя файла, в который NSIS запишет получившийся дистрибутив.

InstallDir $PROGRAMFILES\zvonilka — задает директорию, куда по умолчанию будет установлен ваш продукт. Макрос $PROGRAMFILES указывает на папку Program Files. Вряд ли имеет смысл использовать что-то другое, во всяком случае по умолчанию.

DirText "Сейчас, наверное, установка начнется. Выберите папку."

ComponentText "Выберите компоненты для установки"

Теперь подошло время секций. Секции определяют, во-первых, обязательные и опциональные компоненты установки. Во-вторых, существует специальная секция деинсталляции. В нашем примере всего три «установочных» секции: Файлы программы, Ярлыки в Главном меню и Иконка на Рабочем столе. В NSIS каждая секция оформляется так:

Название секции будет при инсталляции выведено в список доступных компонентов.

Вот сокращенное описание первой секции:

Section "Файлы программы (нужно!)" — задали название.

File /r "c:\pack\zvonilka\*.*" — директива File служит для сбора файлов из указанной вами директории в дистрибутив, а параметр /r нужен для рекурсивного прохода по всем субдиректориям этой папки. Таким образом сохраняется вся структура папок вашего продукта.

SetOutPath $INSTDIR — устанавливает путь, куда будут скопированы файлы. Макрос $INSTDIR — это путь, который выбрал пользователь.

Далее мы создаем записи в Реестре, дабы программу потом легко было удалить.

Что будет выведено в виндовом «Удалении программы»? А вот что:

Что будет вызвано при деинсталляции? Извольте:

И пишем деинсталлятор, файл nsUninst.exe — он будет лежать в той же папке, что и другие файлы вашего продукта:

Теперь покажем юзеру в браузере по умолчанию файл readme.htm, который вы якобы поместили в ту же папку:

Конец секции. Теперь создадим ярлыки.

Новая секция:

Создаем папку Звонилка в меню Пуск > Программы (это меню заменяется в коде макросом $SMPROGRAMS):

Создаем ярлык для запуска программы. Для создания используется функция CreateShortCut. Первый ее параметр — где создаем ярлык, второй — на что создаем, на какой файл. Вот:

И ярлык для удаления:

Все. Теперь осталась еще одна секция, отвечающая за создание ярлыка программы на Рабочем столе. Напомню, что секции у нас опциональные, поэтому если юзер не пометит ее галочкой, то иконка на десктопе и не появится.

И последняя секция, которая будет активирована, когда пользователь решит удалить вашу программу. К этой секции надо отнестись с осторожностью, чтобы не убить ненароком лишние файлы :-). Поэтому разберем секцию по пунктам, как правильный образец деинсталляции:

Удаляем все из папки вашего продукта:

Удаляем ярлык на десктопе:

Удаляем уже пустую директорию вашей программы:

Чистим записи о нашей программе в меню Пуск > Программы.

Финиш :-).

Как вы заметили, скрипт на NSIS не имеет особо четкой структуры. Главное, чтобы была хоть одна секция с параметрами установки. Это я разбил на несколько секций собственно инсталляцию и создание ярлыков. Вы же можете совместить все это в одной секции.

Я не охватил в статье, пожалуй, десятую долю всего, на что способен NSIS. Дока к NSIS'у, в HTML, весит почти 200 Кб — это в 20 раз больше того, что написал здесь я, поэтому сами понимаете, сколько осталось за бортом. Это и создание многоязыковых инсталляторов, и использование разных иконок и картинок, и десятки, если не сотни функций, и... Короче говоря, много чего еще. Моя задача была показать, что простой инсталлятор в NSIS сделать очень просто. А то бывает, люди пугаются того, что в NSIS надо писать какие-то скрипты, и выбирают другой ГИ. Хотя возможности у NSIS удовлетворят любого. Недаром NSIS используется для инсталлятора Winamp'а.

P.S. Чтобы вам не пришлось набивать листинг вручную, я выложил килобайтный исходник на http://www.roxton.kiev.ua/db/nsis_script.zip.

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






Данную страницу никто не комментировал. Вы можете стать первым.

Ваше имя:
Ваша почта:

RSS
Комментарий:
Введите символы или вычислите пример: *
captcha
Обновить





Хостинг на серверах в Украине, США и Германии. © sector.biz.ua 2006-2015 design by Vadim Popov