我正在尝试修改现有的NSIS安装脚本,以允许向用户呈现不同的许可证文件,具体取决于他们是新用户还是现有用户。我有预先存在的代码,用于检测.onInit部分中的现有安装。
然而,我正试图使用NSIS提供的许可证屏幕,例如
!InsertMacro MUI_PAGE_LICENSE Content\Licence.rtf
我希望能够在License和Licence2.rtf之间进行选择(尽管它们将在最终版本中重命名为代表)。
我尝试使用可选择的部分调用嵌套!insertmacro的函数,但这不起作用,因为它需要在脚本的基础级别。
我无法将参数更改为运行时可定义,因为它需要在编译时知道文件是什么,以将其构建到安装程序中。
我知道我可以滚动我自己调用的自定义页面,并按照这种方式进行操作,但我想知道是否有人使用MUI_PAGE_LICENSE和不同的许可证让NSIS安装程序工作。
由于
答案 0 :(得分:8)
有两种方法可以遮盖这只猫:
!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
有plugin为你做这件事(不确定它是否支持RTF)
我编写了一些使用系统插件执行此操作的代码,您可以找到that on the nsis forum。要使用该代码,您可以使用正常的File
命令包含许可文件,并将您想要的文件解压缩到$ pluginsdir并将其加载到许可页面的show callback函数中。
答案 1 :(得分:6)
有一种更简单的方法。我使用这段代码:
!insertmacro MUI_PAGE_LICENSE $(MUILicense)
此外,您必须输入如下代码行:
LicenseLangString MUILicense ${LANG_POLISH} "SomeDirectory\licencja_pl.txt"
LicenseLangString MUILicense ${LANG_ENGLISH} "SomeDirectory\license_en.txt"
在插入许可证宏之前不必显示它们。在我的代码中,我在下面定义了它们并且它工作正常。