Nsis 在一个节中知道是否已经执行了另一个节

Nsis 在一个节中知道是否已经执行了另一个节,nsis,Nsis,我想为我们开发的各种应用程序创建一个套件安装程序。结构如下: 应用程序A 不需要安装驱动程序 应用程序B 需要驱动程序1和2 应用程序C 需要驱动程序2和3 用户可以选择安装他想要的任何应用程序,或多个应用程序。我知道如何使用这些部分。如果用户只选择应用程序A,或者应用程序A带有B或C,这将很好。但是,如果用户选择应用程序B和C,我希望避免驱动程序2将被提示安装两次 有没有办法做到这一点?例如,是否可以知道应用程序C的部分何时执行,应用程序B的部分是否已经执行,以及驱动程序2是否不需要再次安

我想为我们开发的各种应用程序创建一个套件安装程序。结构如下:

  • 应用程序A
    不需要安装驱动程序
  • 应用程序B
    需要驱动程序1和2
  • 应用程序C
    需要驱动程序2和3
用户可以选择安装他想要的任何应用程序,或多个应用程序。我知道如何使用这些部分。如果用户只选择应用程序A,或者应用程序A带有B或C,这将很好。但是,如果用户选择应用程序B和C,我希望避免驱动程序2将被提示安装两次


有没有办法做到这一点?例如,是否可以知道应用程序C的部分何时执行,应用程序B的部分是否已经执行,以及驱动程序2是否不需要再次安装?

可能有很多方法来处理此问题,一种方法是将驱动程序放在一个隐藏部分中,确保其处于正确状态:

!include LogicLib.nsh
!include Sections.nsh
!include x64.nsh

Page Components
Page Directory
Page InstFiles

Section "-Driver2" SID_DRIVER2
${If} ${IsNativeAMD64}
    ; Install AMD64 64-bit driver/library
${ElseIf} ${IsNativeARM64}
    ; Install ARM64 64-bit driver/library
${ElseIf} ${IsNativeIA32}
    ; Install i386 32-bit driver/library
${Else}
    Abort "Unsupported CPU architecture!"
${EndIf}
SectionEnd

Section "App B" SID_APPB
SectionEnd

Section /o "App C" SID_APPC
SectionEnd

Function .onSelChange
${If} ${SectionIsSelected} ${SID_APPB}
${OrIf} ${SectionIsSelected} ${SID_APPC}
    !insertmacro SelectSection ${SID_DRIVER2}
${Else}
    !insertmacro UnselectSection ${SID_DRIVER2}
${EndIf}
FunctionEnd

Function .onInit
Call .onSelChange ; Make sure things are configured correctly in silent installers
FunctionEnd

谢谢有两件事还没有出现在我的NSIS脚本组合中:部分中的if/then/else条件和.onSelChange。这将帮助我前进。