NSIS - 部分依赖 .onSelChange

NSIS - section dependency .onSelChange

我需要一点帮助或建议如何强制 SEC033 和 SEC085 部分以这种方式协同工作:
1. 选择SEC033时,应选择SEC085,不选择SEC033时,应取消选择SEC085至
2. 选择SEC085时,应选择SEC033,未选择SEC085时,应取消选择SEC033至

我的 nsis 部分结构:

SectionGroup "$(SEC03)" SEC03    

    Section "Product 1" SEC031
        SectionIn 1 2
    SectionEnd    

    Section "Product 3" SEC033
        SectionIn 1 2
    SectionEnd    

    Section "Product 6" SEC036
        SectionIn 1 2
    SectionEnd    

SectionGroupEnd    

SectionGroup "$(SEC08)" SEC08    

    Section "Product 2" SEC082
        SectionIn 1 2
    SectionEnd    

    Section "Product 5" SEC085
        SectionIn 1 2
    SectionEnd    

    Section "Product 8" SEC088
        SectionIn 1 2
    SectionEnd    

SectionGroupEnd

我不知道该怎么做,不幸的是我对这一切都不熟悉SectionGetFlags/SectionSetFlags

我尝试使用这个:

SectionGetFlags ${SEC033} [=11=]
SectionSetFlags ${SEC085} [=11=]

& 对于 SEC033 效果很好

但是当我添加

SectionGetFlags ${SEC085} [=12=]
SectionSetFlags ${SEC033} [=12=]

SEC085 根本无法工作,我知道这完全相同,但方式相反,可能这就是问题所在,但我不知道如何解决它....:/

好的,我已经创建了一个解决方案,也许有人也需要它:)

SectionGetFlags ${SEC033} 
SectionGetFlags ${SEC085} 
StrCpy  ""
${If}  == "1"
  ${If}  == "01"
    SectionSetFlags ${SEC033} 1
    StrCpy  "0"
  ${Else}
    ${If}  == "10"
      SectionSetFlags ${SEC085} 1
      StrCpy  "0"
    ${Else}
    ${EndIf}
  ${EndIf}
${Else}
  ${If}  == "10"
    SectionSetFlags ${SEC033} 0
    StrCpy  "1"
  ${Else}
    ${If}  == "01"
      SectionSetFlags ${SEC085} 0
      StrCpy  "1"
    ${Else}
    ${EndIf}
  ${EndIf}
${EndIf}

节标志不仅存储选中状态,它还存储组、粗体和只读标志,因此您不应使用 SectionSetFlags 将状态设置为仅 0 或 1。Sections.nsh 包含每个位的定义,它还包含可用于操作部分的辅助宏。如果你想手动查看一个部分是否被选中(选择),你必须使用位测试:

SectionGetFlags ${SEC033} 
IntOp   & ${SF_SELECTED}

LogicLib.nsh 包含允许您检查 ${If} 语句中的部分的宏:

!include Sections.nsh
!include LogicLib.nsh
Function .onSelChange
${If}  == "1" ; Use  here like you did in your answer
    StrCpy  0
    ${If} ${SectionIsSelected} ${SEC033}
    ${OrIf} ${SectionIsSelected} ${SEC085}
        !insertmacro SelectSection ${SEC033}
        !insertmacro SelectSection ${SEC085}
    ${EndIf}
${Else}
    StrCpy  1
    ${IfNot} ${SectionIsSelected} ${SEC033}
    ${OrIfNot} ${SectionIsSelected} ${SEC085}
        !insertmacro UnselectSection ${SEC033}
        !insertmacro UnselectSection ${SEC085}
    ${EndIf}
${EndIf}