Издательский дом ООО "Гейм Лэнд"ЖУРНАЛ ХАКЕР #90, ИЮНЬ 2006 г.

Установка «В бой!»

ShadOS (shados@real.xakep.ru)

Хакер, номер #090, стр. 090-034-3


Section [/o] [([!]|[-])Section_Name]

# некоторые команды

SectionEnd

Несложно догадаться, что Section_Name – имя нашей секции. Если это имя отсутствует или перед ним стоит опциональный символ минуса “–“, то у пользователя не будет возможности отменить установку компонента. Если же имя секции 'Uninstall' или начинается с префикса 'un.', то это секция деинсталляции. Пример секции крайне прост:

Section "Uninstall"

DeleteRegKey HKLM "Software\Microsoft\Windows\CurrentVersion\Uninstall\Example"

DeleteRegKey HKLM SOFTWARE\NSIS_Example

Delete $INSTDIR\example.nsi

Delete $INSTDIR\uninstall.exe

Delete "$SMPROGRAMS\Example\*.*"

RMDir "$SMPROGRAMS\Example"

RMDir "$INSTDIR"

SectionEnd

Думаю, здесь все понятно — вернемся к шаблону. Параметр /o делает секцию опциональной (то есть не отмеченную для установки по умолчанию), а знак “!” прописывает ее жирным шрифтом. На практике все это выглядит вот так:

Section "-скрытая секция"

SectionEnd

Section "# скрытая секция"

SectionEnd

Section "!жирное выделение"

SectionEnd

Section /o "опциональная секция"

SectionEnd

Кодерские заморочки

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

Function func

# некоторые команды

FunctionEnd

Section

Call func ;вызываем необходимую нам функцию из секции

SectionEnd

В качестве функции разумнее всего определять код, который будет использоваться в нескольких секциях. Например, если мы пишем, установщик новых плагинов для мультимедиа-плеера Winamp, то их придется поместить в каталог с предустановленным плеером. А для этого нужно выполнить проверку:

Function .onVerifyInstDir

IfFileExists $INSTDIR\Winamp.exe PathGood

Abort ; Каталог Winamp выбран неверно. Не могу установить сюда!

PathGood:

FunctionEnd

Теперь пару слов о переменных. Объявляются они при помощи ключевого слова Var. Например, так:

Var NAME

Section example

StrCpy $NAME "ShadOS"

;Теперь можно использовать переменную $NAME, инициализированную строкой "ShadOS"

SectionEnd

Во время разработки скриптов тебе обязательно понадобятся метки, вызываемые инструкцией goto. Они существуют двух видов: относительные и абсолютные. Абсолютные - обычные, как и в любом другом языке программирования объявляются так:

MyLabel:

Относительные же позволяют нам прыгать на несколько инструкций вперед или назад следующим образом:

MessageBox MB_YESNO “Вы желаете сохранить настройки программы?” IDNO +3

Delete $INSTDIR\example.ini

RMDir $INSTDIR

MessageBox MB_OK “Удаление успешно завершено.”

Если пользователь нажмет “No”, то выполнение скрипта перескочит на две инструкции вперед, и программа сообщит пользователю о том, что она успешно справилась с поставленной задачей.

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

Назад на стр. 090-034-2  Содержание  Вперед на стр. 090-034-4
Hosted by uCoz