代码之家  ›  专栏  ›  技术社区  ›  Joshua

如何使一个nsi部分依赖于另一个?

  •  0
  • Joshua  · 技术社区  · 14 年前

    我们的安装程序有四个可见部分(组件):

    * Client
    * Database
    * Server
    * Interface
    

    所有组件都依赖于客户端,因此它是必需的。此外,服务器依赖于数据库,如果数据库不存在,将无法安装。

    1 回复  |  直到 11 年前
        1
  •  1
  •   Anders    14 年前

    可以使用.onSelChange回调更改节状态以响应节更改。

    Outfile test.exe
    !include Sections.nsh
    !include LogicLib.nsh
    
    Page Components
    Page InstFiles
    
    Section "Client"
    SectionIn RO
    SectionEnd
    
    Section /o "Database" SEC_DB
    SectionEnd
    
    Section /o "Server" SEC_SRV
    SectionEnd
    
    Section /o "Interface"
    SectionEnd
    
    
    Function .onSelChange
    ${If} ${SectionIsSelected} ${SEC_SRV}
        !insertmacro SetSectionFlag ${SEC_DB} ${SF_RO}
        !insertmacro SelectSection ${SEC_DB}
    ${Else}
        !insertmacro ClearSectionFlag ${SEC_DB} ${SF_RO}
    ${EndIf}
    FunctionEnd
    

    或不带只读数据库部分:

    Function .onSelChange
    var /Global HadSecSrv
    ${IfNot} ${SectionIsSelected} ${SEC_DB}
        ${If} $HadSecSrv <> 0
            !insertmacro UnselectSection ${SEC_SRV}
        ${EndIf}
    ${EndIf}
    StrCpy $HadSecSrv 0
    ${If} ${SectionIsSelected} ${SEC_SRV} 
        StrCpy $HadSecSrv 1
        !insertmacro SelectSection ${SEC_DB}
    ${EndIf}
    FunctionEnd
    
    推荐文章