Установщик NSIS - Отображение разных лицензий - PullRequest
6 голосов
/ 12 марта 2010

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

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

!InsertMacro MUI_PAGE_LICENSE Content\Licence.rtf

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

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

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

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

Спасибо

Ответы [ 2 ]

8 голосов
/ 13 марта 2010

Есть два способа снять шкуру с этой кошки:

  • Используйте 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)

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

6 голосов
/ 08 марта 2012

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

!insertmacro MUI_PAGE_LICENSE $(MUILicense)

Кроме того, вы должны вставить в ваш код такие строки:

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

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

...