2011-08-31 112 views
1

我想通过使用Jscript在AppCompatFlagsRegistryKey = "HKEY_CURRENT_USER\Software\Microsoft\Windows NT\CurrentVersion\AppCompatFlags\Layers\"的注册表中添加一个条目。但是,我想添加的条目是REG_SZ,它本身带有反斜杠。
例如: name = "C:\Program Files\vendor\myPackage.exe"Data = "RUNASADMIN"
当我使用:WshShell.RegWrite(AppCompatFlagsRegistryKey + name, value, type);如何添加包含反斜杠本身的字符串注册表项?

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

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

但这并不能帮助。任何建议什么是这样做的正确方法?

+0

我敢肯定JavaScript不能发脾气与注册表,纠正我,如果我错了... –

+0

我不是从浏览器运行此。但作为命令行中的Jscript(addStufftoRegistry.js) – user921608

+0

这是因为RegWrite在最终字符串“HKEY_CURRENT_USER \ Software \ Microsoft \ Windows NT \ CurrentVersion \ AppCompatFlags \ Layers \ C:\ Program Files \ vendor \ myPackage中无法正确理解.exe“结尾的KeyName和开始新的ValueName。可能的是RegWrite –

回答

1

为避免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)); 
+0

的限制。这是正确的。在制作这篇文章时,我的双反斜杠在复制代码到浏览器时丢失了。所以实际上我在所有的字符串中使用双反斜杠。 – user921608

+0

更新使用StdRegProv而不是 –

+0

谢谢!该工作 – user921608