Node.js中使用exec执行reg命令报错,但终端运行正常
解决Node.js中exec执行reg命令报
ERROR: Invalid key name的问题 问题出在Node.js的exec默认使用Windows的cmd.exe作为shell,而cmd不支持用单引号包裹注册表键名、参数这类内容——你在终端能正常执行,大概率是用的PowerShell(它支持单引号语法)。
下面是两种可行的修复方案:
方案1:替换单引号为转义的双引号
把命令里的单引号换成双引号,同时在Node字符串中对双引号进行转义(因为Node字符串用双引号包裹时,内部双引号需要加反斜杠):
let { exec } = require("child_process"); let command = "reg add \"HKCU\\SOFTWARE\\MySoftware\" /v \"LOADER\" /t REG_SZ /d \"C:\\Program Files\\MyCompany\\some.dll\" /f"; exec(command, (err, stdout, stderr) => { if (err) console.log(err); });
方案2:指定exec使用PowerShell执行
直接让exec调用PowerShell来运行命令,这样就能保留你原来的单引号写法:
let { exec } = require("child_process"); let command = "reg add 'HKCU\\SOFTWARE\\MySoftware' /v 'LOADER' /t REG_SZ /d 'C:\\Program Files\\MyCompany\\some.dll' /f"; exec(command, { shell: "powershell.exe" }, (err, stdout, stderr) => { if (err) console.log(err); });
如果你的路径或参数包含空格、特殊字符,方案1的双引号写法是cmd的标准兼容方式;如果更习惯PowerShell的语法,方案2会更贴合你的原有命令逻辑。
内容的提问来源于stack exchange,提问作者Sandor Martin Leyva
相关产品推荐
相关产品推荐

