【问题标题】:How do I check if a component is selected in NSIS?如何检查是否在 NSIS 中选择了组件?
【发布时间】:2013-02-21 19:08:21
【问题描述】:

如果选择了某个组件,我想提示用户提供额外信息,但我不确定如何检查给定组件是否被选中。似乎http://nsis.sourceforge.net/Docs/Chapter4.html#4.9.13.2 可能有某种关联,但我的印象是一个部分是一组组件......

在安德斯的帮助下,我得到了这个可行的方法:

!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

【问题讨论】:

    标签: nsis


    【解决方案1】:

    每个部分(带有名称)在组件页面上显示为一个复选框。 (节组可用于形成树形布局,但只有实际节包含可执行代码)

    sections.nsh 包含方便的辅助宏来操作设置,如果您使用logiclib.nsh,您可以使用${If} ${SectionIsSelected} ${MYSECTION} ...

    【讨论】:

    • 我试过了,它大部分都有效。请参阅我的编辑以了解仍然给我带来问题的内容...
    • 啊哈!我知道了,它必须在一个组中,SectionIsSelected 才能工作。
    • 呃,我错了。它仍然使用第一部分,即使那是一个 SelectionGroup。
    • 任何使用 ${SEC_A} 的代码都必须出现在 .nsi 文件中的该部分之后...
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2016-01-06
    • 1970-01-01
    • 2019-11-16
    • 2017-07-24
    • 1970-01-01
    • 2019-02-25
    • 2017-04-04
    相关资源
    最近更新 更多