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

时间:2010-10-30 19:47:05

标签: installer dependencies nsis

在NSI中,我如何让一个部分依赖另一部分呢?

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

* Client
* Database
* Server
* Interface

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

1 个答案:

答案 0 :(得分:1)

您可以使用.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