跳过页面:按钮应该说 "Install" 而不是 "Next"

Skipping pages: Button should say "Install" instead of "Next"

我有一个使用 Modern UI 2 (MUI 2) 的安装程序,它最多可以将三个组件 安装到不同的位置.

我使用一个 MUI_PAGE_COMPONENTS 页面和多个 MUI_PAGE_DIRECTORY 页面,如果没有选择相应的部分(如 here 所述),它们会自动跳过。

到目前为止一切顺利。

但是,如果没有选择安装三个组件中的最后一个,则上一个(未跳过的)目录页面上的按钮应该显示 Install 而不是 Next,因为next会跳过最后一个目录页,执行安装。

既然我们已经知道离开组件页面后会跳过哪个页面,请问有没有办法让它生效?

最小示例:

!include MUI2.nsh

InstallDir $EXEDIR
OutFile "skip.exe"
RequestExecutionLevel user
ShowInstDetails show

!insertmacro MUI_PAGE_COMPONENTS

!define MUI_PAGE_CUSTOMFUNCTION_PRE directoryPreA
!insertmacro MUI_PAGE_DIRECTORY 

!define MUI_PAGE_CUSTOMFUNCTION_PRE directoryPreB
!insertmacro MUI_PAGE_DIRECTORY 

!insertmacro MUI_PAGE_INSTFILES

!insertmacro MUI_LANGUAGE "English"

Section "A" SEC_A
  DetailPrint "Installing A..."
SectionEnd

Section /o "B" SEC_B
  DetailPrint "Installing B..."
SectionEnd

Function directoryPreA
  # Skips the directory page for A if not chosen for installation.
  ${Unless} ${SectionIsSelected} ${SEC_A}
    Abort
  ${EndUnless}
FunctionEnd

Function directoryPreB
  # Skips the directory page for B if not chosen for installation.
  ${Unless} ${SectionIsSelected} ${SEC_B}
    Abort
  ${EndUnless}
FunctionEnd
!include MUI2.nsh
!insertmacro MUI_PAGE_COMPONENTS

!define MUI_DIRECTORYPAGE_TEXT_TOP "Dir:A"
!define MUI_PAGE_CUSTOMFUNCTION_PRE directoryPreA
!insertmacro MUI_PAGE_DIRECTORY 

!define MUI_DIRECTORYPAGE_TEXT_TOP "Dir:B"
!define MUI_PAGE_CUSTOMFUNCTION_PRE directoryPreB
!insertmacro MUI_PAGE_DIRECTORY 

!insertmacro MUI_PAGE_INSTFILES

!insertmacro MUI_LANGUAGE "English"

Section "A" SEC_A
  DetailPrint "Installing A..."
SectionEnd

Section /o "B" SEC_B
  DetailPrint "Installing B..."
SectionEnd

Function .onSelChange
  GetDlgItem [=10=] $HWNDPARENT 1
  ${If} ${SectionIsSelected} ${SEC_A}
  ${OrIf} ${SectionIsSelected} ${SEC_B}
    SendMessage [=10=] ${WM_SETTEXT} 0 "STR:$(^NextBtn)"
  ${Else}
    SendMessage [=10=] ${WM_SETTEXT} 0 "STR:$(^InstallBtn)"
  ${EndIf}
FunctionEnd

Function directoryPreA
  # Skips the directory page for A if not chosen for installation.
  ${IfNot} ${SectionIsSelected} ${SEC_A}
    Abort
  ${ElseIfNot} ${SectionIsSelected} ${SEC_B}
    GetDlgItem [=10=] $HWNDPARENT 1
    SendMessage [=10=] ${WM_SETTEXT} 0 "STR:$(^InstallBtn)"
  ${EndIf}
FunctionEnd

Function directoryPreB
  # Skips the directory page for B if not chosen for installation.
  ${Unless} ${SectionIsSelected} ${SEC_B}
    Abort
  ${EndUnless}
FunctionEnd