原生
开机自启(electron自带)
electron原生自启动app.setLoginItemSettings
app.setLoginItemSettings({
openAtLogin: true, // Boolean 在登录时启动应用
openAsHidden: true, // Boolean (可选) mac 表示以隐藏的方式启动应用。~~~~
// path: '', String (可选) Windows - 在登录时启动的可执行文件。默认为 process.execPath.
// args: [] String Windows - 要传递给可执行文件的命令行参数。默认为空数组。注意用引号将路径换行。
})
自实现
实现原理
通过修改注册表来实现开机自启和通过链接调起应用(类似百度网盘点击连接打开应用程序)
使用到的插件
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)
}
}
})
}
**粗体** _斜体_ [链接](http://example.com) `代码` - 列表 > 引用
。你还可以使用@
来通知其他用户。