如何使用WshShell.RegRead读取名称为文件路径的注册表值

时间:2009-01-18 07:43:55

标签: windows scripting registry wsh

我正在编写一些由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"

1 个答案:

答案 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 

另外:Scripts to manage Registry