我正在编写一些由Windows Scripting Host执行的javascript,我需要能够从注册表中读取某些特定DLL的共享文件计数。注册表项和值如下所示:
[HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows\CurrentVersion\SharedDlls] "C:\\Program Files\\Common Files\\ACME Corp\\AcmeUtil.dll"=dword:00000002 "C:\\Program Files\\Common Files\\ACME Corp\\SuperEdit.ocx"=dword:00000001
我正在尝试使用WshShell.RegRead方法来执行此操作,但它似乎不起作用。我认为问题是这个方法只接受一个参数,它是要检索的值的连接键路径和值名称。由于此情况下的值名称本身就是路径,因此该方法认为它是密钥的一部分。有没有办法让这个方法识别它的值名称?
以下是演示此问题的代码:
var shell = WScript.CreateObject("WScript.Shell"); var keyPath = "HKEY_LOCAL_MACHINE\\SOFTWARE\\Microsoft\\Windows\\CurrentVersion\\SharedDlls\\"; var valName = "C:\\Program Files\\Common Files\\ACME Corp\\AcmeUtil.dll"; WScript.Echo("count = " + shell.RegRead(keyPath + valName));
我看到的错误是:
WshShell.RegRead: Invalid root in registry key "HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows\CurrentVersion\SharedDlls\C:\Program Files\Common Files\ACME Corp\AcmeUtil.dll"
答案 0 :(得分:1)
问题在于斜线......
您可以使用WMI阅读它,如here所述:
Const HKEY_CURRENT_USER = &H80000001
Set oReg=GetObject("winmgmts:{impersonationLevel=impersonate}!\\.\root\default:StdRegProv")
strKeyPath = "Software\ASoftware\ConfigList\MySettings"
strValueName = "xyz\abc"
oReg.GetStringValue HKEY_CURRENT_USER,strKeyPath,strValueName,strValue
wscript.echo strValue