如何检查NSIS中是否选择了组件?

如何检查NSIS中是否选择了组件?,nsis,Nsis,如果选择了某个组件,我想提示用户提供额外的信息,但我不确定如何检查是否选择了给定的组件。看起来可能有某种关联,但我的印象是一个部分是一组组件 在Anders的帮助下,我有一个有效的方法: !include MUI.nsh !include nsDialogs.nsh !include LogicLib.nsh !include sections.nsh Name A InstProgressFlags smooth colored LicenseBkColor /windows OutFile

如果选择了某个组件,我想提示用户提供额外的信息,但我不确定如何检查是否选择了给定的组件。看起来可能有某种关联,但我的印象是一个部分是一组组件

在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}

我尝试过这个方法,它基本上是有效的。查看我的编辑,了解仍然给我带来的问题…啊哈!我知道了,它一定是在一个小组里被选出来工作的。啊,我错了。它仍然使用第一节,即使它是SelectionGroup。任何使用${SEC_a}的代码都必须出现在.nsi文件中该节之后。。。