Electron修改注册表
部分单位电脑上装有还原精灵,electron应用安装时写入的注册表信息都被还原。不得已只好尝试修复注册表信息。
手动修改注册表
唤起注册表编辑器
Win + r, 输入 regedit
双击reg文件修改注册表
- HKEY_LOCAL_MACHINE\Software\Classes:所有用户的默认文件关联设置
- HKEY_CURRENT_USER\Software\Classes:当前用户的文件关联设置(覆盖HKEY_LOCAL_MACHINE项中的设置)
- HKEY_CURRENT_USER\Software\Microsoft\Windows\CurrentVersion\Explorer\FileExts:用户自定义的打开方式
文件扩展注册表.reg
增加文件扩展、对应图表、启动程序1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28Windows Registry Editor Version 5.00
[HKEY_CURRENT_USER\Software\Microsoft\Windows\CurrentVersion\Explorer\FileExts\.yts]
[HKEY_CURRENT_USER\Software\Microsoft\Windows\CurrentVersion\Explorer\FileExts\.yts\OpenWithList]
"a"="YitongYoushiyun.exe"
"MRUList"="a"
[HKEY_CURRENT_USER\Software\Microsoft\Windows\CurrentVersion\Explorer\FileExts\.yts\OpenWithProgids]
"yts File"=hex(0):
[HKEY_LOCAL_MACHINE\SOFTWARE\Classes\.yts]
"yts File_backup"="yts File"
[HKEY_LOCAL_MACHINE\Software\Classes\yts File]
""="application/yts"
[HKEY_LOCAL_MACHINE\Software\Classes\yts File\DefaultIcon]
""="C:\\Program Files\\YitongYoushiyun\\resources\\file.ico"
[HKEY_LOCAL_MACHINE\Software\Classes\yts File\shell]
""="open"
[HKEY_LOCAL_MACHINE\Software\Classes\yts File\shell\open]
""="Open with YitongYoushiyun"
[HKEY_LOCAL_MACHINE\Software\Classes\yts File\shell\open\command]
""="C:\\Program Files\\YitongYoushiyun\\YitongYoushiyun.exe \"%1\""开机启动.reg
1
2Windows Registry Editor Version 5.00
通过命令修改注册表
当没有系统权限时,通过命令往往会失败。需要提升权限执行
redegit 命令
1 |
|
reg 命令
1 |
|
node
child_process exec
1 |
|
electron 使用 elevate.exe 执行以上命令
1 |
|
child_process spawn
1 |
|
最终实现
1 双击xxx.reg能够正常写入注册表
2 通过reg、node命令执行会提示没有权限,写入失败
3 通过elevate.exe执行reg、node命令方式更新注册表,虽然提示成功,但注册表并没有更新
4 通过elevate.exe执行redegit命令成功写入
由于xxx.reg中部分参数是动态的,所以程序执行时动态生成.reg文件,通过4修改注册表
拓展
electron修改注册表获取管理员权限
1 |
|
electron 开机启动
- electron自带
app.setLoginItemSettings
https://www.electronjs.org/docs/latest/api/app#appsetloginitemsettingssettings-macos-windows - 注册表
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25const 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)
})
}
}); - scheme
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48const 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)
}
}
})
}
参考资料
nodejs
reg命令
FileAssociation.nsh
callUsingElevation
rage-edit
regedit
electron开启自启动
Electron修改注册表
http://example.com/20220622-修改注册表/