编辑:到目前为止,我包含的所有标题都是MUI.nsh
. 我认为这应该排除将 LogicLib.nsh 和 Section.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
and !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 的官方论坛中也得到了相同问题的答案。这讲述了同样的故事。