编辑:到目前为止,我包含的所有标题都是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.nshand !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 的官方论坛中也得到了相同问题的答案。这讲述了同样的故事。