【问题标题】:NSIS do things if section is not checked如果未检查部分,NSIS 会执行操作
【发布时间】:2016-04-05 16:13:10
【问题描述】:

我创建了一个运行良好的 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

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

【问题讨论】:

    标签: nsis sections


    【解决方案1】:

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

    !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
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2015-02-02
      • 2011-09-19
      • 1970-01-01
      • 2014-06-18
      • 1970-01-01
      • 2018-01-23
      • 2018-06-01
      • 1970-01-01
      相关资源
      最近更新 更多