Установка «В бой!» 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”, то выполнение скрипта перескочит на две инструкции вперед, и программа сообщит пользователю о том, что она успешно справилась с поставленной задачей. Вообще, этих средств уже достаточно, чтобы написать хороший инсталлятор. Наш самый первый инсталлятор можно существенно улучшить, добавив ему функциональности. Но мы не будем публиковать его код. Во-первых, теперь тебе по силам написать скрипт самому. А во-вторых, ты найдешь его исходники на диске, и дублировать информацию в журнале, смысла нет. |