根据用户选择安装的内容,在开始菜单中有不同的条目

Have different entries in startmenu dependent on what user has chosen to install

我正在 NSIS 安装程序中使用组件的可选安装,如 NSIS wiki 上的 Controlling Available Install Options 所示。

这个工作正常,取决于用户选择的选项,安装相关部分。

但是现在出现在单独部分的开始菜单条目有问题:

Section -startmenu
SetShellVarContext all
CreateDirectory "$SMPROGRAMS\MyInstall"
CreateShortCut "$SMPROGRAMS\MyInstallOpenAPC\Editor1.lnk" "$INSTDIR\Editor1.exe" "" "$INSTDIR\icon.ico" 0
CreateShortCut "$SMPROGRAMS\MyInstallOpenAPC\Editor2.lnk" "$INSTDIR\Editor2.exe" "" "$INSTDIR\icon.ico" 0
CreateShortCut "$SMPROGRAMS\MyInstallOpenAPC\Editor3.lnk" "$INSTDIR\Editor3.exe" "" "$INSTDIR\icon.ico" 0
CreateShortCut "$SMPROGRAMS\MyInstallOpenAPC\Editor4.lnk" "$INSTDIR\Editor4.exe" "" "$INSTDIR\icon.ico" 0
Sectionend

根据可选安装的包,我只想创建一些开始菜单条目。

如何做到这一点?如何在开始菜单条目和已安装的部分之间建立关系?

您可以检查是否选择了相关组件(部分):

!include LogicLib.nsh
InstallDir "$ProgramFiles\MyApp"
Page Components
Page InstFiles

Section "Foo" SID_FOO
SetOutPath "$InstDir\Foo"
; ...
SectionEnd

Section "Bar" SID_BAR
SetOutPath "$InstDir\Bar"
; ...
SectionEnd

Section "Start menu shortcuts"
SetShellVarContext all
${If} ${SectionIsSelected} ${SID_FOO}
    CreateDirectory "$SMPROGRAMS\MyApp"
    CreateShortcut "$SMPROGRAMS\MyApp\Foo.lnk" "$InstDir\Foo\Foo.exe"
${EndIf}
${If} ${SectionIsSelected} ${SID_BAR}
    CreateDirectory "$SMPROGRAMS\MyApp"
    CreateShortcut "$SMPROGRAMS\MyApp\Bar.lnk" "$InstDir\Bar\Bar.exe"
${EndIf}
SectionEnd