startmenu中的不同条目取决于用户选择安装的内容

时间:2017-04-27 17:26:32

标签: windows installer nsis

我正在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

依赖于可选安装的软件包,我只想创建一些开始菜单条目。

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

1 个答案:

答案 0 :(得分:1)

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

!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