Установщик NSIS - отображение различных лицензий

Я пытаюсь изменить существующий сценарий установки NSIS, чтобы разрешить различные файлы лицензий, которые будут представлены пользователю в зависимости от того, являются ли они новым или существующим пользователем. У меня есть уже существующий код, который обнаруживает существующую установку в .раздел функции OnInit.

однако я сталкиваюсь с ударами, пытаясь использовать экран лицензии NSIS, например

!InsertMacro MUI_PAGE_LICENSE ContentLicence.rtf

Я хотел бы быть в состоянии выбрать между лицензией и Licence2.rtf (хотя они будут переименованы что-то представитель в окончательном варианте).

Я пробовал использовать выбираемые разделы, вызывающие функции, которые гнездятся !insertmacro, но это не работает, потому что он должен быть на базовом уровне скрипта.

Я не могу изменить параметр для определения времени выполнения, потому что он должен знать, что файл во время компиляции, чтобы встроить его в установщик.

Я знаю, что могу свернуть свою собственную страницу, вызванную из функции, и сделать это таким образом, но мне было интересно, если любой получил установщик NSIS, работающий с использованием MUI_PAGE_LICENSE и различных лицензий.

спасибо

2 ответов


есть два способа освежевать эту кошку:

  • используйте 2 страницы лицензии и пропустите одну из них
  • Загрузить файл лицензии вручную во время выполнения

две страницы:

!define MUI_PAGE_CUSTOMFUNCTION_PRE skip1
!InsertMacro MUI_PAGE_LICENSE Content\Licence.rtf
!define MUI_PAGE_CUSTOMFUNCTION_PRE skip2
!InsertMacro MUI_PAGE_LICENSE Content\Licence2.rtf
#You need two functions skip1 and skip2, they should call `abort` to skip based on some state you determine at run-time

механическая нагрузка:

есть плагин это делает это для вас (не уверен, что он поддерживает RTF)

Я написал код, который делает это с помощью системного плагина, вы можете найти что на форуме НСИ. Использовать этот код, вы бы включить ваши файлы лицензий с normal File команды и извлеките тот, который вы хотите $pluginsdir и загрузите его в функцию обратного вызова на странице лицензии.


есть более простой способ. Я использую этот код:

!insertmacro MUI_PAGE_LICENSE $(MUILicense)

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

LicenseLangString MUILicense ${LANG_POLISH} "SomeDirectory\licencja_pl.txt"
LicenseLangString MUILicense ${LANG_ENGLISH} "SomeDirectory\license_en.txt"

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