Как прочитать значение реестра, имя которого является путем к файлу, используя WshShell.RegRead - PullRequest
0 голосов
/ 18 января 2009

Я пишу некоторый javascript для выполнения Windows Scripting Host, и мне нужно иметь возможность считать общее количество файлов из реестра для определенных конкретных библиотек 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 Ответ

1 голос
/ 18 января 2009

Проблема в слэше ...
Вы можете прочитать его с помощью WMI, как описано здесь :

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 

Также: Скрипты для управления реестром

...