一、创建快捷方式到桌面
NSIS 的 CreateShortCut 指令创建任意快捷方式,示例如下:
CreateShortCut "$DESKTOP\test.lnk" "$INSTDIR\test.exe"
注:$DESKTOP代表桌面目录路径
二、创建快捷方式到任务栏
NSIS 的 ExecShell 指令将快捷方式锁定到开始菜单或任务栏
;创建开始菜单快捷方式
ExecShell "startpin" "$DESKTOP\test.lnk"
;创建任务栏快捷方式
ExecShell "taskbarpin" "$DESKTOP\test.lnk"
卸载的时候先解除开始菜单或任务栏
;创建开始菜单快捷方式
ExecShell "startunpin" "$DESKTOP\test.lnk"
;删除任务栏快捷方式
ExecShell "taskbarunpin" "$DESKTOP\test.lnk"
三、创建快捷方式到开始菜单目录
NSIS 的 CreateShortCut 指令创建任意快捷方式,示例如下:
SetShellVarContext all ;所有用户下
CreateDirectory "$SMPROGRAMS\Test" ;建立开始菜单目录下的程序目录
CreateShortCut "$SMPROGRAMS\Test\卸载test.lnk" "$INSTDIR\uninst.exe"
CreateShortCut "$SMPROGRAMS\Test\test.lnk" "$INSTDIR\test.exe"
注:$SMPROGRAMS代表开始菜单程序目录
重点:这里有一个小坑,上面有一句 SetShellVarContext all
首先我们先理解一下这行命令的意思,NSIS手册解释如下:
个人理解就是在Windows系统中本身允许很多用户的存在,因此,你可以选择打包程序是安装在哪个用户程序目录下。
那么为什么要在开始菜单目录创建快捷方式的时候提到这个,因为这有个坑:
在实际操作过程中,针对win8.1和win10操作系统,由于开始目录的权限限制,我们有时候并不能完美的显示安装包所需要的功能
我在自己得操作过程中就发现了,自制安装程序,在win10开始菜单里面创建快捷方式,第一次点开的时候,能看到,但一会儿,眼看着win10把卸载的快捷方式隐藏了。
但是点开快捷方式所在的开始菜单的文件夹,卸载的快捷方式仍然在。
目前解决的办法就是,运用all用户权限和current用户权限各写一遍,卸载的时候也记得都要删。
SetShellVarContext current ;当前用户下
CreateDirectory "$SMPROGRAMS\Test"
CreateShortCut "$SMPROGRAMS\Test\卸载test.lnk" "$INSTDIR\uninst.exe"
CreateShortCut "$SMPROGRAMS\Test\test.lnk" "$INSTDIR\test.exe"
SetShellVarContext all ;所有用户下
CreateDirectory "$SMPROGRAMS\Test"
CreateShortCut "$SMPROGRAMS\Test\卸载test.lnk" "$INSTDIR\uninst.exe"
CreateShortCut "$SMPROGRAMS\Test\test.lnk" "$INSTDIR\test.exe"