Nsis NSI在未检查区段的情况下执行操作

Nsis NSI在未检查区段的情况下执行操作,nsis,sections,Nsis,Sections,我已经创建了一个NSIS安装程序,运行良好。现在我想添加另一个名为“安装为更新”的部分,该部分仅在未选中时执行操作 原因: 安装完整版本后,它将覆盖包含软件激活码的某些文件 我可以用其他方式,制作一个名为“安装完整版本”的部分,但这没有什么意义 Section /o "Install as update" SecUpdate *if(checked == false){ SetOutPath "$INSTDIR\data" File "data\Con

我已经创建了一个NSIS安装程序,运行良好。现在我想添加另一个名为“安装为更新”的部分,该部分仅在未选中时执行操作

原因: 安装完整版本后,它将覆盖包含软件激活码的某些文件

我可以用其他方式,制作一个名为“安装完整版本”的部分,但这没有什么意义

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

*这两行代表了我想要做的事情。

如果一个部分未选中,那么无论您做什么,其中的代码都不会执行,因此您必须将代码放在其他地方。隐藏部分是一个很好的解决方案:

!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