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

Wys*_*wyg 6 nsis

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

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

!InsertMacro MUI_PAGE_LICENSE Content\Licence.rtf
Run Code Online (Sandbox Code Playgroud)

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

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

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

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

谢谢

And*_*ers 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
Run Code Online (Sandbox Code Playgroud)

手动加载:

有一个插件可以为您执行此操作(不确定它是否支持RTF)

我写了一些使用系统插件执行此操作的代码,您可以在nsis论坛上找到.要使用该代码,您可以将许可文件包含在普通File命令中,并将所需的文件解压缩到$ pluginsdir并将其加载到许可页面的show callback函数中.


小智 6

有一种更简单的方法.我用这个代码:

!insertmacro MUI_PAGE_LICENSE $(MUILicense)
Run Code Online (Sandbox Code Playgroud)

此外,你必须像这样输入你的代码行:

LicenseLangString MUILicense ${LANG_POLISH} "SomeDirectory\licencja_pl.txt"
LicenseLangString MUILicense ${LANG_ENGLISH} "SomeDirectory\license_en.txt"
Run Code Online (Sandbox Code Playgroud)

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