2010-10-30 37 views
0

在NSI中,我怎样才能使一个部分依赖于另一个?如何使一个nsi部分依赖于另一个?

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

* Client 
* Database 
* Server 
* Interface 

所有组件依赖于客户端,所以它是强制性的。另外,服务器依赖于数据库,如果数据库不存在,将无法安装。

回答

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 

或者不只读DB部分:

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 
+0

有一个问题:在.onSelChange方法需要下面的所有部分它修改。 – Joshua 2010-11-01 17:11:30

+0

是的,这是因为部分ID只在部分指令之后定义。 – Anders 2010-11-02 01:48:29

相关问题