electron 写入注册表 实现开机自启动

时间:2023-03-08 21:07:32

windows平台

首先先明确;开机自启动写入注册表的位置,在KEY_CURRENT_USER\Software\\Microsoft\\Windows\\CurrentVersion\\Run

打开注册表方法: win + R ,运行regedit,按照上面路径点到Run上,右侧的值就是开机启动项。

确认开机自启动设置成功方法: win + R , 运行 msconfig,点开启动项,前面有对号的就是开机的启动项。

写入注册表:

var regedit = require('regedit'); //引入regedit
regedit.putValue({
'HKCU\\Software\\Microsoft\\Windows\\CurrentVersion\\Run':{
'vanish2' : {
value : "C:\Windows",
type : 'REG_SZ' //type值为REG_DEFAULT时,不会自动创建新的name
}
}
},function(err){
console.log(err);
})

列出regedit列表:

regedit.list('HKCU\\Software\\Microsoft\\Windows\\CurrentVersion\\Run',function(err,result){
console.log(result);
})

创建Key值,这个key值,其实就是注册表里的项值,新建项值(一个文件夹,不是文件夹里的值)。

regedit.createKey('HKCU\\Software\\Microsoft\\Windows\\CurrentVersion\\Run\\ele', function(err) {
console.log(err);
})

删除Key值,会删除文件夹下所有值

regedit.deleteKey('HKCU\\Software\\Microsoft\\Windows\\CurrentVersion\\Run', function(err) {
console.log(err);
})

删除值,regedit的文档中并没看到这一项,寻找到的文档中,给出了一个凑合着的方案就是清空键值,利用putValue,给原来Name的值变为空

代码示例:

regedit.putValue({
'HKCU\\Software\\Microsoft\\Windows\\CurrentVersion\\Run':{
'vanish2' : {
value : "",
type : 'REG_SZ'
}
}
},function(err){
console.log(err);
})

删除参照原github地址:https://github.com/ironSource/node-regedit#regeditdeletekeystringarray-function

当然这种方式治标不治本,所以想要真正的去删除一个键值,还需要靠其他的东西(或许regedit 有,只是我没看到。)

新的删除方法,需要引用 child_process

示例代码:

var cp = require('child_process');
//删除vanish2的键值
cp.exec("REG DELETE HKCU\\Software\\Microsoft\\Windows\\CurrentVersion\\Run /v vanish2 /f",function(err)
{
console.log(err);
});

这种child_process 也可以去添加注册表,原理是用系统的reg功能,想要查看Reg功能,请在cmd中,运行 REG /?,会得到提示,同时这些在cmd之中,可以直接运行,所以可以先在cmd运行成功后,再放入程序中调试。

REG 操作查询:

REG QUERY /?
REG ADD /?
REG DELETE /?
REG COPY /?
REG SAVE /?
REG RESTORE /?
REG LOAD /?
REG UNLOAD /?
REG COMPARE /?
REG EXPORT /?
REG IMPORT /?
REG FLAGS /?

所以通过child_process就可以上面的命令了:

var cp = require('child_process');
cp.exec("REG QUERY HKCU\\Software\\Microsoft\\Windows\\CurrentVersion\\Run",function(error,stdout,stderr) {
console.log(error);
  console.log(stdout);
  console.log(stderr);
});

希望对你有帮助,谢谢。