使用NSIS封装exe制作安装包如何实现Windows开机自启
你之前使用的CreateShortCut命令仅创建了桌面、开始菜单目录的快捷方式,这些位置的快捷方式不会被系统自动加载运行,因此无法实现开机自启效果。可以通过以下两种常用方案实现需求:
方案1:向系统启动文件夹添加快捷方式
系统启动文件夹内的所有快捷方式会在用户登录时自动运行,NSIS提供了对应内置常量可以直接调用:
- 仅当前用户生效(无需管理员权限,仅当前登录的用户开机后会启动程序):
在安装逻辑段添加如下代码:
; 向当前用户的启动目录添加快捷方式 CreateShortCut "$SMSTARTUP\abc.lnk" "$INSTDIR\abc.exe"
- 所有用户生效(需要安装包申请管理员权限,所有登录该设备的用户开机后都会启动程序):
首先在NSIS脚本开头添加管理员权限声明:
RequestExecutionLevel admin
然后在安装逻辑段添加:
; 向所有用户的公共启动目录添加快捷方式 CreateShortCut "$ALLUSERS\$SMSTARTUP\abc.lnk" "$INSTDIR\abc.exe"
对应的卸载逻辑段需要添加删除逻辑,避免卸载后残留自启项:
; 删除启动目录快捷方式,按需选择对应路径即可 Delete "$SMSTARTUP\abc.lnk" Delete "$ALLUSERS\$SMSTARTUP\abc.lnk"
方案2:写入Windows注册表开机启动项
通过修改注册表的Run节点实现自启,同样分两种生效范围:
- 仅当前用户生效(无需管理员权限):
在安装逻辑段添加:
WriteRegStr HKCU "Software\Microsoft\Windows\CurrentVersion\Run" "abc" '"$INSTDIR\abc.exe"'
- 所有用户生效(需要管理员权限):
在安装逻辑段添加:
WriteRegStr HKLM "Software\Microsoft\Windows\CurrentVersion\Run" "abc" '"$INSTDIR\abc.exe"'
对应的卸载逻辑段删除代码:
; 按需选择对应注册表根节点删除即可 DeleteRegValue HKCU "Software\Microsoft\Windows\CurrentVersion\Run" "abc" DeleteRegValue HKLM "Software\Microsoft\Windows\CurrentVersion\Run" "abc"
注意事项
- 如果你的
abc.exe运行需要管理员权限,必须选择所有用户生效的自启方案,同时安装包申请管理员权限,否则普通用户登录时程序会因为权限不足无法启动 - 不需要同时使用两种方案,选择任意一种符合需求的即可,避免重复启动
内容的提问来源于stack exchange,提问作者maverickabhi
相关产品推荐
相关产品推荐

