我有一个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。
有没有办法检查某个组中的特定部分是否被选中,而不会受到该组中其他部分的干扰?
答案 0 :(得分:2)
您发布的代码应该适用于部分组内的单个部分。我可以看到的唯一问题是,如果SectionFlagIsSet $ {SEC_NAV} ...代码在<。strong>之前出现<。strong>中的实际部分。部分索引(SEC_EXACT,SEC_NAV)的定义在处理section命令之前未定义,因此$ {SEC_NAV}将不是有效数字,SectionFlagIsSet可能会将其处理为0,这是您的部分组。
您还应切换到逻辑库,以便代码如下所示:
${If} ${SectionIsSelected} ${SEC_NAV}
;....
${Else}
;....
${EndIf}