Electron开发——开机应用程序自启动(非管理员模式、管理员模式)

参考官方文档:主进程模块

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授权窗口。

UAC.png

4. 计划任务启动程序

优点:设置管理员权限可以开机自启软件,开机自启动不会弹出UAC授权窗口。

实现思路:写一个程序比如luancher.exe,将此程序设置为开机启动,但是此程序不添加管理员权限,而使用默认权限;启动此程序时,此程序通过“runs”参数启动需要管理员权限的程序。

你可能感兴趣的:(Electron开发——开机应用程序自启动(非管理员模式、管理员模式))