NSIS:检查是否选择了section group中的section

时间:2010-06-24 10:52:21

标签: nsis

我有一个NSIS脚本,其中包含许多部分和一个部分组。这纯粹是出于显示目的,例如:

SectionGroup /e "ERP Integration"
    Section /o "Exact" SEC_EXACT
        ; section stuff
    SectionEnd

    Section /o "Navision" SEC_NAV
        ; section stuff
    SectionEnd
SectionGroupEnd

现在,我想检查是否选择了特定的子部分。你有Sections.nsh标题和一些漂亮的宏,所以我尝试了:

    !insertmacro SectionFlagIsSet ${SEC_NAV} ${SF_SELECTED} End${ProductName} ""
        StrCpy ${ConfigProductVar} "true"
        StrCpy ${ConfigGlobalVar} "true"
        nsislog::log "$INSTDIR\install.log" "${ProductName} is not yet installed and selected, call config"
    End${ProductName}:

但是,如果选择了某个组中的某个子部分,则返回true。

有没有办法检查某个组中的特定部分是否被选中,而不会受到该组中其他部分的干扰?

1 个答案:

答案 0 :(得分:2)

您发布的代码应该适用于部分组内的单个部分。我可以看到的唯一问题是,如果SectionFlagIsSet $ {SEC_NAV} ...代码在<。strong>之前出现<。strong>中的实际部分。部分索引(SEC_EXACT,SEC_NAV)的定义在处理section命令之前未定义,因此$ {SEC_NAV}将不是有效数字,SectionFlagIsSet可能会将其处理为0,这是您的部分组。

您还应切换到逻辑库,以便代码如下所示:

${If} ${SectionIsSelected} ${SEC_NAV}
;....
${Else}
;....
${EndIf}