实现原理
通过修改注册表来实现开机自启和通过链接调起应用(类似百度网盘点击连接打开应用程序)
使用到的插件
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)
}
}
})
}