参考官方文档:主进程模块
1. 打开注册表
1.1. 开机自启动注册表写入位置:
- 未设置管理员权限时开机自启动【存储在CurrentUser下】—— 开发/安装模式均可调式效果 【官方推荐设置】
- 设置管理员模式时开机自启动【存储在LocalMachine下】—— 必须安装后才可调试!
设置管理员权限:更改electron-builder的配置,可以通过配置package.json中requestedExecutionLevel达到请求管理员权限打开应用,修改后的应用图标右下角多个盾牌的标志。
1.2. 打开注册表方法
键盘按下win + R ,运行窗口输入“regedit”,回车即可进入注册表编辑器。
1.3. 确认开机自启设置成功的方法
键盘按下win + R , 运行窗口输入“msconfig”,在系统配置中点开启动项,可看到开机启动项状态。
2. 官方设置方式
存储在CurrentUser下,注册表位置:计算机\HKEY_CURRENT_USER\Software\Microsoft\Windows\CurrentVersion\Run
。
在主进程启动方法配置:
// 获取可执行文件位置ex:在程序打包之前,找到的是node_modules\electron\dist\electron.exe,程序打包安装后,找到的是真正的应用的可执行文件。
const ex=process.execPath;
// 监听设置开机自启动
ipcMain.handle('set-launch-with-windows', (event, args) => {
// 需要在应用打包后,将可执行文件路径写进注册表里。
if (app.isPackaged) { //应用是否打包
log.info('是否开机自启动参数:',args.launch_with_windows);
app.setLoginItemSettings({
openAtLogin: args.launch_with_windows,
openAsHidden: false,
path: ex,
args: ["--openAsHidden"],
})
}
})
配置项:
- openAtLogin: Boolean (可选) - true在登录时启动应用。
- openAsHidden: Boolean (可选) macOS - true 表示以隐藏的方式启动应用。 默认为false。
- path: String (可选) Windows - 在登录时启动的可执行文件,具体的为打包后的APP所在的exe文件路径。
- args: String Windows - 要传递给可执行文件的命令行参数。默认为空数组。注意用引号将路径换行。
缺点:未设置管理员权限可开机自启软件,设置管理员权限无法开机自启软件。
3. 手动控制入注册表
问题:官方设置自启动方式
app.setLoginItemSettings
,自启软件设置为以管理员权限运行,就不能开机自启,只有将以管理员权限运行取消勾选才可以自启。
原因:当程序默认需要管理员权限启动时,64位程序通过注册表开机启动失效了,但是32位的程序还是有效的,可以把64位注册表启动项的位置也写入32位的路径下。
存储在LocalMachine下。 参考写法
32位注册表位置:计算机\HKEY_LOCAL_MACHINE\SOFTWARE\WOW6432Node\Microsoft\Windows\CurrentVersion\Run
。
64位注册表位置:计算机\HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows\CurrentVersion\Run
。
let cp = require('child_process');
// 获取可执行文件位置ex:在程序打包之前,找到的是node_modules\electron\dist\electron.exe,程序打包安装后,找到的是真正的项目的可执行文件。
const ex=process.execPath;
// 监听设置开机自启动
ipcMain.handle('set-launch-with-windows', (event, args) => {
// 需要在应用打包后,将可执行文件路径写进注册表里。
if(args.launch_with_windows){
cp.exec(`REG ADD HKEY_LOCAL_MACHINE\\SOFTWARE\\WOW6432Node\\Microsoft\\Windows\\CurrentVersion\\Run /v electron.app.BigFoot-WOW /t REG_SZ /d "${ex}" /f`,function(err){
console.log(err);
});
} else {
cp.exec("REG DELETE HKEY_LOCAL_MACHINE\\SOFTWARE\\WOW6432Node\\Microsoft\\Windows\\CurrentVersion\\Run /v electron.app.BigFoot-WOW /f",function(err){
console.log(err);
});
}
})
优点:设置管理员权限可以开机自启软件。
缺点:开机自启动会弹出UAC授权窗口。
4. 计划任务启动程序
优点:设置管理员权限可以开机自启软件,开机自启动不会弹出UAC授权窗口。
实现思路:写一个程序比如luancher.exe,将此程序设置为开机启动,但是此程序不添加管理员权限,而使用默认权限;启动此程序时,此程序通过“runs”参数启动需要管理员权限的程序。