题
编辑:截至目前,我所包含的所有标题都是 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了。再次包含它并没有什么坏处,这样做是一个好主意(这样你就不依赖于你不控制的代码来包含它)。