如果选择了某个组件,我想提示用户更多信息,但是我真的不确定如何检查是否选择了给定组件。看来http://nsis.sourceforge.net/Docs/Chapter4.html#4.9.13.2可能有某种联系,但我给人的印象是,一节是一组组件。

在Anders的帮助下,我可以做到这一点:

!include MUI.nsh
!include nsDialogs.nsh
!include LogicLib.nsh
!include sections.nsh

Name A
InstProgressFlags smooth colored
LicenseBkColor /windows
OutFile A.exe
InstallDir $PROGRAMFILES\A

Var Dialog

Section "A" SEC_A
SectionEnd
Section "B" SEC_B
SectionEnd

!insertmacro MUI_PAGE_COMPONENTS
Page custom getA setA # {{{
!insertmacro MUI_PAGE_DIRECTORY # {{{ install
Function getA

   ${Unless} ${SectionIsSelected} ${SEC_A}
      Abort
   ${EndUnless}

   nsDialogs::Create 1018
   Pop $Dialog

   ${If} $Dialog == error
      Abort
   ${EndIf}

   ${NSD_CreateLabel} 0 0 100% 12u "Test"

   nsDialogs::Show
FunctionEnd
Function setA
   MessageBox MB_OK "clicked?"
FunctionEnd
# }}}
!insertmacro MUI_PAGE_INSTFILES
!insertmacro MUI_UNPAGE_CONFIRM
!insertmacro MUI_UNPAGE_INSTFILES

最佳答案

每个部分(带有名称)在组件页面上均显示为复选框。 (部分组可用于形成树形布局,但仅实际部分包含可执行代码)
sections.nsh包含方便的帮助程序宏来操纵设置,如果您使用logiclib.nsh,则可以执行${If} ${SectionIsSelected} ${MYSECTION} ...

10-04 23:09