NSIS安装程序开始菜单目录

时间:2012-06-20 10:02:12

标签: nsis

我有一个NSIS安装程序,它使用此代码对开始菜单文件夹进行了硬编码...

Var SMDir ;Start menu folder
!insertmacro MUI_PAGE_STARTMENU 0 $SMDir

Section -StartMenu
  !insertmacro MUI_STARTMENU_WRITE_BEGIN 0
  CreateDirectory "$SMPrograms\MY Program\My Folder"
  CreateShortCut "$DESKTOP\My Program" "$INSTDIR\start.exe"
  CreateShortCut "$SMPROGRAMS\MY Program\My Shortcut.lnk" "$INSTDIR\start.exe"
  CreateShortCut "$SMPROGRAMS\My Program\Uninstall.lnk" "$INSTDIR\uninstall.exe"

这一切都与“选择开始菜单文件夹”不同,它不允许我更改默认安装目录。

有没有办法解决这个问题,或者我如何跳过此页但仍会触发StartMenu部分?

1 个答案:

答案 0 :(得分:2)

如果您根本不想要一个startmenu选择页面,只需删除!insertmacro MUI_PAGE_STARTMENU ...部分中的!insertmacro MUI_STARTMENU_*和两个-StartMenu宏。

如果您想允许用户选择目录,那么您必须使用变量而不是硬编码路径:

outfile test.exe
name "SM Test"
requestexecutionlevel user ;Single user/"Just me" installer

!define MUI_COMPONENTSPAGE_NODESC
!include mui2.nsh

Var SMDir ;Start menu folder
!insertmacro MUI_PAGE_COMPONENTS
;!define MUI_STARTMENUPAGE_DEFAULTFOLDER "MY Program" ;Default, name is used if not defined
!insertmacro MUI_PAGE_STARTMENU 0 $SMDir
!insertmacro MUI_PAGE_INSTFILES
!insertmacro MUI_LANGUAGE English


Section -StartMenu
!insertmacro MUI_STARTMENU_WRITE_BEGIN 0 ;This macro sets $SMDir and skips to MUI_STARTMENU_WRITE_END if the "Don't create shortcuts" checkbox is checked... 
CreateDirectory "$SMPrograms\$SMDir"
CreateShortCut "$SMPROGRAMS\$SMDir\Myapp.lnk" "$INSTDIR\start.exe"
!insertmacro MUI_STARTMENU_WRITE_END
SectionEnd

Section "Desktop Shortcut"
CreateShortCut "$DESKTOP\Myapp.lnk" "$INSTDIR\start.exe"
SectionEnd

(如果您以管理员身份安装,那么您应该在访问$ SMPrograms之前调用SetShellVarContext all并且您可能不应该创建桌面快捷方式)