» Выполнение собственных NSIS функций

Официальный сайт SFX Creator
Группа SFX Creator [В]Контакте
Данная возможность доступна только в зарегистрированной версии
Вы можете выполнить собственные NSIS функции, если разбираетесь в этом языке

Каталог include файлов находится в папке с проектом:
\projects\<имя проекта>\Include


О работе диалога

Принцип работы данного диалога немного отличается от всех остальных диалогов SFX Creator
Первое, что вы сможете заметить - невозможность изменить значение первой колонки, т.е. имя Include-файла
Вы не сможете изменить include файл в уже существующей записи


Добавление данных

Include файл
Вы должны предварительно поместить ваш nsh файл в директорию "\projects\<имя проекта>\Include" и в выпадающем списке выбрать необходимый include файл
Нажмите кнопку "Обзор", скопируйте nsh-файлы в папку, которая открылась, затем нажмите кнопку  для обновления списка файлов

Имя функции для выполнения
Имя функции, прописанная в вашем Include файле, которую следует выполнить


Свободная функция

Если вы установите функции данный тип при добавлении/редактировании команды, то данная команда будет исполняться также, как и другие команды из "Дополнительных возможностей"
Вы сможете управлять порядком исполнения команды в диалоге Группы и компоненты, а также при таком типе функции она будет выполнена в зависимости от позиции в Порядке выполнении команд
Обратите внимание, в какой позиции по выполнению в скрипте будут свободные функции, они имеют приоритет перед NSIS функциями "после распаковки файлов":

Выполнение NSIS функций до распаковки файлов
Распаковка файлов
Выполнение свободных NSIS функций
Выполнение NSIS функций после распаковки файлов

.onInit
Доступно только если в вашем проекте подключен графический интерфейс, выполняет вашу функцию в момент инициализации SFX архива

.onGUIInit
Доступно только если в вашем проекте подключен графический интерфейс, выполняет вашу функцию в момент инициализации графического интерфейса SFX архива


Баннер прогресса распаковки

При написании/исполнении своих NSIS функций вы можете использовать команды управления баннером прогресса распаковки (только если он подключен в проекте), информацию о командах смотрите на страничке описания возможности Баннер прогресса распаковки


Команды из каких стандартных файлов включения (*.nsh) можно использовать в своих скриптах

На этот вопрос конкретно отвечать не буду, т.к. в зависмости от используемой версии SFX Creator содержимое папки Include может меняться, так что можете сами посмотреть, какие Include-файлы есть в папке с NSIS.


Использование своих плагинов и добавление упаковки файлов в архив

В своих скриптах NSIS вы можете легко прописать выполнение функции своего плагина или добавить распаковку дополнительных файлов (добавить файлы в архив)
Для этого необходимо открыть папку \projects\<имя проекта>\Include и скопировать туда необходимые файлы (dll/nsh и т.д.)
Для упаковки файлов необходимо использовать переменную окружения $%INCLUDE_DIR%, она создаётся в момент начала сборки проекта и ссылается на папку Include, в которой находятся ваши nsh-скрипты и dll-файлы плагинов

Дополнительно прописывать ничего не нужно, если только не хотите раскидать всё по подпапкам, чтобы было "красиво и удобно"

Парочка примеров
Пример nsh-файла с упаковкой файла и выполнением своего (стороннего) плагина
Function TEST
 File "/oname=$EXEDIR\Новое имя архива.rar" "$%INCLUDE_DIR%\Мой архив.rar"
; Добавление файла \projects\<имя проекта>\Include\Мой архив.rar в SFX архив
; Распаковка этого файла в папку, откуда будет запущен SFX архив, изменяя при этом имя архива на "Новое имя архива.rar"

; Файл плагина скопирован в папку\projects\<имя проекта>\Include
Push "$EXEDIR\Fullscreen_Screenshot.bmp"
nsScreenshot::Grab_FullScreen
 Pop $0
 ${If} $0 == "ok"
   MessageBox MB_OK|MB_ICONINFORMATION "$EXEDIR\Fullscreen_Screenshot.bmp$\n$\nСкриншот сохранен"
 ${Else}
   MessageBox MB_OK|MB_ICONSTOP "$EXEDIR\Fullscreen_Screenshot.bmp$\n$\nОшибка снятия скриншота"
 ${EndIf}
quit ; Закрытие инсталлятора (для примера, конечно же)
FunctionEnd

Пример nsh-файла с упаковкой файла и выполнением своего (стороннего) плагина
Данный пример отличается от предыдущего тем, что в этом примере я создаю удобную структуру папок в каталоге Include, все свои плагины я помещаю в папку MyPlugins, а дополнительные файлы включения (которые требуются для этого или других скриптов) - в папку MyInclude
Таким образом, у меня нет "лишних" файлов в папке Include, ну, это так сказать для тех, кто любит порядок ;)
!addplugindir "$%INCLUDE_DIR%\MyPlugins" ; В Этой папке теперь могут находиться NSIS плагины, как и nsScreenshot
!addincludedir "$%INCLUDE_DIR%\MyInclude" ; В Этой папке теперь могут находиться nsh-файлы включения, как и OtherFile.nsh

!include "OtherFile.nsh" ; Этот файл находится в папке MyInclude
                          
Function TEST 
call func_OtherFile.nsh ; Эта функция прописана в файле OtherFile.nsh

 File "/oname=$EXEDIR\Новое имя архива.rar" "$%INCLUDE_DIR%\Мой архив.rar"
; Добавление файла \projects\<имя проекта>\Include\Мой архив.rar в SFX архив
; Распаковка этого файла в папку, откуда будет запущен SFX архив, изменяя при этом имя архива на "Новое имя архива.rar"

; Файл плагина скопирован в папку \projects\<имя проекта>\Include\MyPlugins
Push "$EXEDIR\Fullscreen_Screenshot.bmp"
nsScreenshot::Grab_FullScreen
 Pop $0
 ${If} $0 == "ok"
   MessageBox MB_OK|MB_ICONINFORMATION "$EXEDIR\Fullscreen_Screenshot.bmp$\n$\nСкриншот сохранен"
 ${Else}
   MessageBox MB_OK|MB_ICONSTOP "$EXEDIR\Fullscreen_Screenshot.bmp$\n$\nОшибка снятия скриншота"
 ${EndIf}
quit ; Закрытие инсталлятора (для примера, конечно же)
FunctionEnd