在NSIS中的两个部分之间插入自定义页面

时间:2013-06-03 14:01:26

标签: nsis

(对不起,我无法想出一个更好的头衔)

我有以下部分代码:

!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之前放置自定义页面,但对于用户来说这看起来很奇怪。)

2 个答案:

答案 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页面运行。