Как мне сделать один раздел NSI зависит от другого? - PullRequest
0 голосов
/ 30 октября 2010

В NSI, как сделать один раздел зависимым от другого?

Наш установщик имеет четыре видимых раздела (компонента):

* Client
* Database
* Server
* Interface

Все компоненты зависят от клиента, поэтому это обязательно. Кроме того, сервер зависит от базы данных и не будет установлен, если база данных отсутствует.

1 Ответ

1 голос
/ 31 октября 2010

Вы можете использовать обратный вызов .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
...