编辑:截至目前,我所包含的所有标题都是 MUI.nsh.我认为这应该排除有LogicLib的选项。nsh和部分。nsh包含在脚本的其他部分。

尽管有我在下面发布的脚本,但代码仍然编译。

好吧,我把NSIS脚本的那些部分叫做 !include MUI2.nsh 命名空间。我需要更清楚地了解哪些是我真正应该使用的命名空间 !include 在我的代码中。这是我的困惑:

1)我有这样的代码:

!insertmacro MUI_PAGE_WELCOME
!insertmacro MUI_PAGE_COMPONENTS
!insertmacro MUI_PAGE_DIRECTORY
Page custom DbPage "" ": Information Page"
Page instfiles
!insertmacro MUI_PAGE_FINISH

这基本上意味着我也在使用自定义InstallOptions页面。所以我想我需要包括 !include InstallOptions.nsh!include MUI.nsh.成功了。但令我惊讶的是,即使我不包括 !include InstallOptions.nsh 代码编译,我看到最终结果没有区别!!但如果我只包括 !include MUI2.nsh, ,代码不编译。但它编译和工作正常,如果我包括 !include MUI2.nsh & !include InstallOptions.nsh. 那么我应该包括什么, !include MUI.nsh 单独或组合 !include MUI2.nsh & !include InstallOptions.nsh ?? .代码编译,如果我包括所有 !include MUI2.nsh, !include InstallOptions.nsh!include MUI.nsh. 在这种情况下,宏和函数将从 !include MUI2.nsh!include MUI.nsh ??

2)我用一个 这里定义的函数 查看某个部分是否被选中,如下所示:

SectionGetFlags ${Section_Name} $R0 
IntOp $R0 $R0 & ${SF_SELECTED} 
IntCmp $R0 ${SF_SELECTED} show 

链接要求包括 !include Sections.nsh, ,但对我来说,脚本编译即使不包括在内。 为什么呢??我应该理想地 !include 它?

3)我有类似的代码:

${If} ${FileExists} `$0\*.*`
${Else}
    CreateDirectory $0
${EndIf}

  ${If} $2 != <
    StrCpy $2 >
  ${EndIf}

  ${If} $3 != <
    StrCpy $3 >
  ${EndIf}

等。 所以我不应该 !include LogicLib ? 即使不使用,我也会编译代码 !include LogicLib.

为什么我能够编译NSIS脚本而不包含适当的包/引用?

更新资料: 我得到了一个 在这里回答 以及在nullsoft的官方论坛同样的问题。这讲述了同样的故事。

有帮助吗?

解决方案

不要称它们为命名空间,NSIS没有 命名空间. !include'ed文件直接"粘贴"到代码中(在!包括行is)。

1)

MUI2为其自定义页面使用nsDialogs,MUI(v1)使用InstallOptions。

如果 需要安装选项中的宏。nsh在 你的 代码然后 应包括在内。如果MUI需要它,那么它将包括它,而无需您做任何事情。

你应该 不是 包括MUI2两者。nsh和MUI。nsh,你需要选择其中一个!

2)3)

其他一些代码包括部分。nsh/LogicLib。已经是nsh了。再次包含它并没有什么坏处,这样做是一个好主意(这样你就不依赖于你不控制的代码来包含它)。

许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top