Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/418.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 如何添加本身包含反斜杠的字符串注册表项?_Javascript_Registry - Fatal编程技术网

Javascript 如何添加本身包含反斜杠的字符串注册表项?

Javascript 如何添加本身包含反斜杠的字符串注册表项?,javascript,registry,Javascript,Registry,我想使用Jscript在注册表中的AppCompatFlagsRegistryKey=“HKEY\U CURRENT\U USER\Software\Microsoft\Windows NT\CurrentVersion\AppCompatFlags\Layers\”添加一个条目。但是,我要添加的条目是一个REG_SZ,其名称本身带有反斜杠。 例如: name=“C:\Program Files\vendor\myPackage.exe”和Data=“RUNASADMIN” 使用时:WshShe

我想使用Jscript在注册表中的
AppCompatFlagsRegistryKey=“HKEY\U CURRENT\U USER\Software\Microsoft\Windows NT\CurrentVersion\AppCompatFlags\Layers\”
添加一个条目。但是,我要添加的条目是一个
REG_SZ
,其名称本身带有反斜杠。
例如:
name=“C:\Program Files\vendor\myPackage.exe”
Data=“RUNASADMIN”

使用时:
WshShell.RegWrite(AppCompatFlagsRegistryKey+名称、值、类型)

结果是,只有名称的最后一部分(package.exe)被视为叶。我试过了

name=“\”+”C:\Program Files\vendor\myPackage.exe“+”\”


但这没有帮助。有什么建议吗?正确的方法是什么?

你必须用
\\
将每个
\
用文字字符串转义,以避免js将
\?
视为转义序列

name = "C:\\Program Files\\vendor\\myPackage.exe";
编辑:

使用
RegWrite
似乎无法做到这一点,下面是一种使用WMI的方法:

var AppCompatFlagsRegistryKey = "Software\\Microsoft\\Windows NT\\CurrentVersion\\AppCompatFlags\\Layers";
var name = "C:\\Program Files\\vendor\\myPackage.exe";
var Data = "RUNASADMIN";
var result;
var objRegistry = GetObject("winmgmts://./root/default:StdRegProv");

try {
    result = objRegistry.SetStringValue(0x80000001 /*HKCU*/, AppCompatFlagsRegistryKey, name, Data);
} catch (e) {
    alert(e.message);
    result = 0;
}
alert("success: " + (result == 0));

必须使用
\\
以文本字符串形式转义每个
\
,以避免js将
\?
视为转义序列

name = "C:\\Program Files\\vendor\\myPackage.exe";
编辑:

使用
RegWrite
似乎无法做到这一点,下面是一种使用WMI的方法:

var AppCompatFlagsRegistryKey = "Software\\Microsoft\\Windows NT\\CurrentVersion\\AppCompatFlags\\Layers";
var name = "C:\\Program Files\\vendor\\myPackage.exe";
var Data = "RUNASADMIN";
var result;
var objRegistry = GetObject("winmgmts://./root/default:StdRegProv");

try {
    result = objRegistry.SetStringValue(0x80000001 /*HKCU*/, AppCompatFlagsRegistryKey, name, Data);
} catch (e) {
    alert(e.message);
    result = 0;
}
alert("success: " + (result == 0));

我很确定javascript不能处理注册表,如果我错了请纠正我…我不是在浏览器上运行这个。但作为来自命令行(addStuff ToRegistry.js)的Jscript,这是因为RegWrite无法正确理解最终字符串“HKEY\U CURRENT\U USER\Software\Microsoft\Windows NT\CurrentVersion\AppCompatFlags\Layers\C:\Program Files\vendor\myPackage.exe”中的结束键名和开始新值名。可能是RegWrite的限制我很确定javascript不能适应注册表,如果我错了请纠正我…我不是在浏览器上运行这个。但作为来自命令行(addStuff ToRegistry.js)的Jscript,这是因为RegWrite无法正确理解最终字符串“HKEY\U CURRENT\U USER\Software\Microsoft\Windows NT\CurrentVersion\AppCompatFlags\Layers\C:\Program Files\vendor\myPackage.exe”中的结束键名和开始新值名。可能是RegWriteThat的限制是正确的。我的两个反斜杠在将代码复制到浏览器中时丢失了,这篇文章是在写这篇文章时丢失的。因此,事实上我在所有字符串中都使用了双反斜杠。使用StdRegProv而不是dead更新亲爱的@Alex K。我想用您的方法执行以下批处理文件:
REG添加“HKCU\Software\Google\Chrome\NativeMessagingHosts\com.Google.Chrome.example.echo”/ve/t REG_SZ/d”%~dp0com.Google.Chrome.example.echo win.json”/f
您能帮助我吗?%~dp0是包含此bat脚本的目录,以反斜杠结尾。我想为使用chrome在本地打开的页面添加一个使用javascript的注册表。可能吗?我在某个地方读到,由于安全问题,这是不可能的。在这种情况下,解决方案是什么?这是正确的。我的两个反斜杠在将代码复制到浏览器中时丢失了,这篇文章是在写这篇文章时丢失的。因此,事实上我在所有字符串中都使用了双反斜杠。使用StdRegProv而不是dead更新亲爱的@Alex K。我想用您的方法执行以下批处理文件:
REG添加“HKCU\Software\Google\Chrome\NativeMessagingHosts\com.Google.Chrome.example.echo”/ve/t REG_SZ/d”%~dp0com.Google.Chrome.example.echo win.json”/f
您能帮助我吗?%~dp0是包含此bat脚本的目录,以反斜杠结尾。我想为使用chrome在本地打开的页面添加一个使用javascript的注册表。可能吗?我在某个地方读到,由于安全问题,这是不可能的。在这种情况下,解决方案是什么?