Electron应用调用setLoginItemSettings设置Windows开机自启失败如何解决
排查方向&解决方案
UAC权限拦截是首要原因
你手动启动时触发UAC提示说明程序配置了管理员权限申请,HKEY_CURRENT_USER路径下的开机启动项默认不会触发UAC弹窗,系统会直接拦截需提权的程序启动,导致自启失败。
若程序不需要管理员权限,在package.json的build配置下新增Windows执行权限配置:"build": { "win": { "requestedExecutionLevel": "asInvoker" } }若必须要管理员权限,需要将启动项写入
HKEY_LOCAL_MACHINE路径,写入操作本身需要管理员权限,建议在安装程序阶段完成配置。启动参数多余转义导致解析失败
你在args中手动给exeName加了额外双引号,app.setLoginItemSettings接口本身会自动处理路径空格的转义,多余的引号会导致启动时参数解析错误,程序无法正常启动。如果程序启动不需要自定义参数,可以直接省略args字段,需要传参也不要额外加引号:app.setLoginItemSettings({ openAtLogin: true, path: executable_path, name: exeName // 不需要额外加args,或者传参时去掉手动加的引号 })启动项显示异常的修复方法
系统启动项读取的是exe文件的内置资源信息,打包时未完善配置就会显示为其他未知程序。在build的win配置下补充程序信息即可:"build": { "win": { "icon": "你的图标路径.ico", "companyName": "你的开发者名称", "fileVersion": "1.0.0", "productName": "Test Autorun" } }设置逻辑位置优化
你当前在程序关闭的close-me事件中才修改自启配置,如果程序异常退出会导致配置不生效,建议将自启配置同步逻辑移到app.on('ready')阶段,每次程序启动时就根据当前配置更新一次自启状态。测试注意事项
不要在开发模式(electron-forge start)下测试自启功能,开发模式下process.execPath指向的是Electron的运行时二进制文件,不是你最终打包的程序路径,必须打包为安装包安装到本地后再测试自启功能。
内容的提问来源于stack exchange,提问作者Elias Khazzaka

