2010-10-30 21 views
0

En NSI, comment puis-je faire dépendre une section d'une autre?Comment puis-je faire dépendre une section nsi d'une autre?

Notre installateur dispose de quatre sections visibles (composants):

* Client 
* Database 
* Server 
* Interface 

Tous les composants dépendent du client, il est donc obligatoire. En outre, le serveur dépend de la base de données et ne pourra pas être installé si la base de données n'est pas présente.

Répondre

1

Vous pouvez utiliser le rappel .onSelChange pour modifier les états de section en réponse à un changement de section.

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 

ou sans lecture seule section 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

Un Gotcha: la méthode .onSelChange doit en dessous de toutes les sections qu'il modifie. – Joshua

+0

Oui, c'est parce que l'identifiant de section est seulement défini après l'instruction de section. – Anders