(对不起,我无法想出一个更好的头衔)
我有以下部分代码:
!insertmacro MUI_PAGE_COMPONENTS
!insertmacro MUI_PAGE_INSTFILES
Page Custom nsDialogsPage nsDialogsPageLeave
section Section1
#do something
sectionEnd
section Section2
#do something else
sectionEnd
Function nsDialogsPage
#do something
FunctionEnd
Function nsDialogsPageLeave
#do something else
FunctionEnd
但是,现在我想在第1节之后和第2节之前显示自定义页面(我在第2节中使用的自定义页面中输入一些信息)。我该怎么办呢? (我总是可以在MUI_PAGE_INSTFILES之前放置自定义页面,但对于用户来说这看起来很奇怪。)
答案 0 :(得分:2)
所有部分都在instfiles页面上执行,但是可以有多个instfiles页面。要防止所有部分执行两次,您需要使用sections.nsh
中的帮助程序宏打开/关闭正确的部分,或者将某个状态存储在全局变量中,并将所有部分代码放在if块中,例如:{{ 1}}。您可能还需要使用${If} $installstep = 0
...
答案 1 :(得分:0)
我使用PRE功能选择/取消选择部分:
!insertmacro MUI_PAGE_COMPONENTS
!define MUI_PAGE_CUSTOMFUNCTION_PRE checkSkipSection
!insertmacro MUI_PAGE_INSTFILES
Page Custom nsDialogsPage nsDialogsPageLeave
!define MUI_PAGE_CUSTOMFUNCTION_PRE checkSkipSection
!insertmacro MUI_PAGE_INSTFILES
Var SkipSection
section Section1
#do something
StrCpy $SkipSection 1
sectionEnd
section Section2
#do something else
sectionEnd
Function nsDialogsPage
#do something
FunctionEnd
Function nsDialogsPageLeave
#do something else
FunctionEnd
Function checkSkipSection
${If} $SkipSection = ""
SectionSetFlags ${Section1} ${SF_SELECTED}
SectionSetFlags ${Section2} 0
${ElseIf} $SkipSection = 1
SectionSetFlags ${Section2} ${SF_SELECTED}
SectionSetFlags ${Section1} 0
${EndIf}
FunctionEnd
所以在第一个MUI_PAGE_INSTFILES中,只运行Section1,而Section2在第二个MUI_PAGE_INSTFILES页面运行。