Nodejs通过exec怎么获取注册表的信息

Nodejs通过exec怎么获取注册表的信息

win7下的nodejs 0.8.3版

在命令提示符下通过命令 REG QUERY HKEY_CURRENT_USER\Software\WanXiang /v Name 可以获得我想要的结果

HKEY_CURRENT_USER\Software\WanXiang Name REG_SZ sx

但是把上面的命令放在nodejs的exec中提示error,命令如下

var cp = pr.exec(’“REG QUERY HKEY_CURRENT_USER\Software\WanXiang /v Name”’,{ encoding:‘utf8’, timeout:0, maxBuffer:210241024, killSignal:‘SIGTERM’, cwd:null, env:null }); cp.stdout.on(‘data’,function(data){ console.log(data); }); cp.stderr.on(‘data’,function(data){ console.log(‘err’); console.log(data); }); cp.on(‘exit’,function(code,signal){ console.log(code); console.log(signal); });

打印输出

err ϵͳ�Ҳ���

1 null

如果把exec里面的内容换成dir或者tasklist是能够正常输出的,求解释!


5 回复

要在Node.js中通过child_process.exec方法来执行系统命令并获取Windows注册表信息,需要注意一些细节。在你的例子中,错误主要源于命令字符串的格式以及路径分隔符的处理。

解决方案

首先,确保命令字符串使用正确的引号包裹,并且路径中的反斜杠需要被转义。另外,建议使用模板字符串(backticks)来定义命令字符串,这样可以更方便地插入变量。

下面是修改后的示例代码:

const { exec } = require('child_process');

// 使用正确的命令格式
var cmd = `REG QUERY "HKEY_CURRENT_USER\\Software\\WanXiang" /v Name`;

var cp = exec(cmd, {
    encoding: 'utf8',
    timeout: 0,
    maxBuffer: 2 * 1024 * 1024,
    killSignal: 'SIGTERM',
    cwd: null,
    env: null
});

cp.stdout.on('data', function (data) {
    console.log('Output:', data);
});

cp.stderr.on('data', function (data) {
    console.error('Error:', data);
});

cp.on('exit', function (code, signal) {
    console.log(`Child process exited with code ${code} and signal ${signal}`);
});

关键点解释

  1. 命令字符串:

    • 使用双引号包裹注册表路径 ("HKEY_CURRENT_USER\\Software\\WanXiang"), 并且每个反斜杠需要被转义为 \\
    • 使用模板字符串(反引号)来定义命令字符串,可以避免不必要的转义问题。
  2. 错误处理:

    • stderr 事件监听器用于捕获任何可能的错误信息。这有助于调试命令执行时出现的问题。
  3. 输出处理:

    • stdout 事件监听器用于处理命令的正常输出结果。

通过上述修改,你应该能够成功执行命令并获取到注册表的信息。如果仍然遇到问题,请检查命令是否正确、权限是否足够,以及Node.js版本与环境配置是否兼容。


是乱码问题 解决方案 因为默认是asni编码的

所以 中文就会显示不正常 只有 在0x00~0x7f之间的正确 就是英文那些

非常谢谢楼上的回答,应该不是乱码问题,因为在百度知道里面已经解决了,解决的代码如下:

var pr = require(‘child_process’);

var cp = pr.exec(“REG QUERY HKEY_CURRENT_USER\Software\WanXiang /v Name”,function(error,stdout,stderr){ console.log(‘stdout:’+stdout); console.log(‘stderr:’+stderr); if(error != null){ console.log(‘exec error:’+error); } });

在Windows系统中使用Node.js的child_process模块中的exec方法来执行REG QUERY命令时,遇到问题通常是由于路径或命令字符串中的转义字符问题。此外,确保Node.js进程有足够的权限来访问注册表。

以下是一个修正后的示例代码,展示如何正确地使用exec来查询注册表信息:

const { exec } = require('child_process');

exec(`reg query "HKEY_CURRENT_USER\\Software\\WanXiang" /v Name`, {
    encoding: 'utf8',
    timeout: 0,
    maxBuffer: 2 * 1024 * 1024,
    killSignal: 'SIGTERM',
    cwd: null,
    env: null
}, (error, stdout, stderr) => {
    if (error) {
        console.error(`执行出错: ${error}`);
        return;
    }
    console.log(`标准输出:\n${stdout}`);
    console.log(`错误输出:\n${stderr}`);
});

解释:

  1. 双反斜杠:在JavaScript字符串中,反斜杠(\)需要进行转义,因此注册表路径中的每个反斜杠都应写成\\
  2. 引号reg query命令中的路径应使用双引号括起来,以确保路径中的空格不会导致命令解析错误。
  3. 回调函数:这里使用了exec的回调函数形式来处理结果,它会接收三个参数:errorstdoutstderr,这样可以更方便地处理命令的输出和可能的错误。

通过这种方式,你可以正确地执行注册表查询并捕获其输出。确保你的Node.js程序有足够的权限来访问注册表项,并且你的用户账户具有相应的读取权限。

回到顶部