Search code examples
nsissections

NSIS do things if section is not checked


I have created an NSIS Installer which works fine. Now I want to add another section called "install as update" which only will do things when it is NOT checked.

Why: When the full version is installed, it will overwrite certain files which contain the activation codes of the software.

I can do it otherwise, and make a section called "install full version", but that makes less sense.

Section /o "Install as update" SecUpdate  
    *if(checked == false){
        SetOutPath "$INSTDIR\data"
        File "data\ConfigFile.xml"
        File "..."
        File "..."
        File "..."
        File "..."
        File "..."
        File "..."
        File "..."
    *}
SectionEnd

*these two lines represent what I would like to do.


Solution

  • If a section is unchecked then the code in it will not execute no matter what you do so you have to put the code somewhere else. A hidden section is a good solution:

    !include LogicLib.nsh
    !include Sections.nsh
    
    Page Components
    Page InstFiles
    
    Section "Program files"
    SectionIn RO
    ;SetOutPath ...
    ;File ...
    SectionEnd
    
    Section /o "Install as update" SID_UPDATE
    SectionEnd
    
    Section -OverwriteActivation SID_OWACTIVATION
    SetOutPath "$INSTDIR\data"
    File "whatever.xml"
    SectionEnd
    
    Function .onSelChange
    ${If} ${SectionIsSelected} ${SID_UPDATE}
        !insertmacro UnselectSection ${SID_OWACTIVATION}
    ${Else}
        !insertmacro SelectSection ${SID_OWACTIVATION}
    ${EndIf}
    FunctionEnd