【问题标题】:NSIS Installer - Displaying different licencesNSIS 安装程序 - 显示不同的许可证
【发布时间】:2010-03-12 16:57:24
【问题描述】:

我正在尝试修改现有的 NSIS 安装脚本,以允许根据用户是新用户还是现有用户向用户提供不同的许可证文件。我有预先存在的代码,可以检测 .onInit 部分中的现有安装。

但是我在尝试使用 NSIS 提供的许可证屏幕时遇到了麻烦,例如

!InsertMacro MUI_PAGE_LICENSE Content\Licence.rtf

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

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

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

我知道我可以滚动从函数调用的我自己的自定义页面并这样做,但我想知道是否有人让 NSIS 安装程序使用 MUI_PAGE_LICENSE 和不同的许可证。

谢谢

【问题讨论】:

    标签: nsis


    【解决方案1】:

    给这只猫剥皮的方法有两种:

    • 使用 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 并将其加载到许可证页面的显示回调函数中。

    【讨论】:

      【解决方案2】:

      有一个更简单的方法。我使用此代码:

      !insertmacro MUI_PAGE_LICENSE $(MUILicense)
      

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

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

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

      【讨论】:

      • 谢谢,这正是我正在搜索的内容,所有其他文档/答案都通过以下错误之一告诉这一点:在您的第一个脚本行上缺少 MUILicense var 周围的 $(),而是使用静态文件名var 在同一行,使用 LANG_XY 而不是 ${LANG_XY} 等。
      猜你喜欢
      • 1970-01-01
      • 2017-07-15
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2014-08-30
      相关资源
      最近更新 更多