0

(对不起,我想不出更好的标题)

我有以下部分代码:

!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 之前,但这对用户来说看起来很奇怪。)

4

2 回答 2

2

所有部分都在 instfiles 页面上执行,但是可以有多个 instfiles 页面。为了防止所有部分执行两次,您需要使用辅助宏打开/关闭正确的部分,sections.nsh或将某些状态存储在全局变量中,并将所有部分代码放在 if 块中,例如:${If} $installstep = 0。您可能还需要使用SetAutoClose...

于 2013-06-03T18:31:30.707 回答
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 页面中运行。

于 2013-06-04T11:51:52.583 回答