Dependencies NSIS-节依赖项.onSelChange

Dependencies NSIS-节依赖项.onSelChange,dependencies,nsis,Dependencies,Nsis,我需要一些帮助或建议,如何强制SEC033和SEC085部分以这种方式协同工作: 1.选择SEC033时,应选择SEC085;取消选择SEC033时,应取消选择SEC085,以 2.选择SEC085时,应选择SEC033;取消选择SEC085时,应取消选择SEC033以 我的nsis部门结构: SectionGroup "$(SEC03)" SEC03 Section "Product 1" SEC031 SectionIn 1 2 SectionEnd

我需要一些帮助或建议,如何强制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} $0
SectionSetFlags ${SEC085} $0
&因为SEC033工作得很好

但当我加上

SectionGetFlags ${SEC085} $0
SectionSetFlags ${SEC033} $0

SEC085根本不起作用,我知道这是完全相同的,但方式相反&可能这就是问题所在,但我不知道如何解决它……://

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


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

SectionGetFlags ${SEC033} $4
IntOp $4 $4 & ${SF_SELECTED}
LogicLib.nsh包含宏,可用于检查${If}语句中的节:

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

您的示例完全省略了使用SectionSetFlags的部分。此外,示例应该尽可能少,所以不需要发布那么多的部分。你不应该使用像这样的SectionSetFlags!是的,那看起来肯定要优雅得多,这正是我想要的,谢谢:)
!include Sections.nsh
!include LogicLib.nsh
Function .onSelChange
${If} $6 == "1" ; Use $6 here like you did in your answer
    StrCpy $6 0
    ${If} ${SectionIsSelected} ${SEC033}
    ${OrIf} ${SectionIsSelected} ${SEC085}
        !insertmacro SelectSection ${SEC033}
        !insertmacro SelectSection ${SEC085}
    ${EndIf}
${Else}
    StrCpy $6 1
    ${IfNot} ${SectionIsSelected} ${SEC033}
    ${OrIfNot} ${SectionIsSelected} ${SEC085}
        !insertmacro UnselectSection ${SEC033}
        !insertmacro UnselectSection ${SEC085}
    ${EndIf}
${EndIf}