2010-10-30 34 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

相關問題