electron实现开机自启+通过连接调起应用

实现原理

通过修改注册表来实现开机自启和通过连接调起应用(类似百度网盘点击连接打开应用程序)

使用到的插件

node-regedit yarn add regedit

使用说明

将下方例子中的electronApp替换为自己的应用别名(可以不为exe名称)

开机自启

const regedit = require('regedit');
const { app } = require('electron');
const path = require('path');

// 开机自启动
// 查看开机自启注册表是否已经注册electronApp
regedit.list('HKCU\\Software\\Microsoft\\Windows\\CurrentVersion\\Run', (err, data) => {
  if (err) {
    console.log(err)
  }
  if (!data['HKCU\\Software\\Microsoft\\Windows\\CurrentVersion\\Run'].values.electronApp || 
    data['HKCU\\Software\\Microsoft\\Windows\\CurrentVersion\\Run'].values.electronApp !== 
    app.getPath('exe')) { // 未注册或注册地址与现地址不一致则 进行注册
    regedit.putValue({
      'HKCU\\Software\\Microsoft\\Windows\\CurrentVersion\\Run': {
        'electronApp': {
          value: app.getPath('exe'),
          type: 'REG_SZ'
        }
      }
    }, (error) => {
      if (error) console.log(error)
    })
  }
});

通过连接调起应用

const regedit = require('regedit');
  const { app } = require('electron');
  /**
   * 下文中的`electronAPP`替换为自己需要的唤起名
   * 使用时直接在html中使用<a href='electronAPP://'>唤起app</a>
  */
  let url = app.getPath('exe'); // 获取可运行exe存放目录
  function setPath (url) {
    regedit.putValue({
      'HKLM\\SOFTWARE\\Classes\\electronAPP': { // 设置注册表url调用electronApp
        'defaule': {
          value: 'electronAPP', // 设置点击url的弹出框名字(表现不好)
          type: 'REG_DEFAULT'
        },
        'URL Protocol': {
          value: '',
          type: 'REG_SZ'
        },
        'path': {
          value: `${url}`,
          type: 'REG_SZ'
        }
      },
      'HKLM\\SOFTWARE\\Classes\\electronAPP\\shell\\open\\command': {
        'defaule': {
          value: `"${url}" "$1"`, // 需要唤起的应用程序路劲
          type: 'REG_DEFAULT'
        }
      }
    }, (putErr) => {
      console.log(putErr)
    })
  }
  if (url) { // 判断启动url是否正确(用户重新安装,并将安装目录修改)
    regedit.list('HKLM\\SOFTWARE\\Classes\\electronAPP', (listErr, docData) => {
      if (listErr) {
        regedit.createKey(['HKLM\\SOFTWARE\\Classes\\electronAPP\\shell\\open\\command'], (createErr) => {
          if (!createErr) {
            setPath(url)
          }
        })
      } else {
        if (docData['HKLM\\SOFTWARE\\Classes\\electronAPP'].values.path.value !== url) {
          setPath(url)
        }
      }
    })
  }

相关推荐