NSIS安装程序 - 显示不同的许可证

时间:2010-03-12 16:57:24

标签: nsis

我正在尝试修改现有的NSIS安装脚本,以允许向用户呈现不同的许可证文件,具体取决于他们是新用户还是现有用户。我有预先存在的代码,用于检测.onInit部分中的现有安装。

然而,我正试图使用​​NSIS提供的许可证屏幕,例如

!InsertMacro MUI_PAGE_LICENSE Content\Licence.rtf

我希望能够在License和Licence2.rtf之间进行选择(尽管它们将在最终版本中重命名为代表)。

我尝试使用可选择的部分调用嵌套!insertmacro的函数,但这不起作用,因为它需要在脚本的基础级别。

我无法将参数更改为运行时可定义,因为它需要在编译时知道文件是什么,以将其构建到安装程序中。

我知道我可以滚动我自己调用的自定义页面,并按照这种方式进行操作,但我想知道是否有人使用MUI_PAGE_LICENSE和不同的许可证让NSIS安装程序工作。

由于

2 个答案:

答案 0 :(得分:8)

有两种方法可以遮盖这只猫:

  • 使用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

手动加载:

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"

在插入许可证宏之前不必显示它们。在我的代码中,我在下面定义了它们并且它工作正常。