electron實現開機自啓+經過連接調起應用

原生

開機自啓(electron自帶)

electron原生自啓動
app.setLoginItemSettingshtml

app.setLoginItemSettings({
  openAtLogin: true, // Boolean 在登陸時啓動應用
  openAsHidden: true, // Boolean (可選) mac 表示以隱藏的方式啓動應用。~~~~
  // path: '', String (可選) Windows - 在登陸時啓動的可執行文件。默認爲 process.execPath.
  // args: [] String Windows - 要傳遞給可執行文件的命令行參數。默認爲空數組。注意用引號將路徑換行。
})

自實現

實現原理

經過修改註冊表來實現開機自啓經過連接調起應用(相似百度網盤點擊鏈接打開應用程序)node

使用到的插件

node-regedit yarn add regeditgit

使用說明

將下方例子中的electronApp替換爲本身的應用別名(能夠不爲exe名稱)github

開機自啓

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)
        }
      }
    })
  }
相關文章
相關標籤/搜索