2009-01-18 8 views
0

J'écris du javascript pour être exécuté par Windows Scripting Host, et je dois être capable de lire les comptes de fichiers partagés du registre pour certains DLL spécifiques. La clé de Registre et les valeurs ressemblent à ceci:Comment lire une valeur de registre dont le nom est un chemin de fichier utilisant WshShell.RegRead

 
[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 

Je tente d'utiliser la méthode WshShell.RegRead pour le faire, mais il ne semble pas fonctionner. Je pense que le problème est que cette méthode prend uniquement un seul paramètre qui est le chemin de la clé concaténée et le nom de la valeur à extraire. Puisque le nom de la valeur dans ce cas est lui-même un chemin, la méthode pense qu'il fait partie de la clé. Est-il possible d'obtenir cette méthode pour reconnaître le nom de la valeur pour ce que c'est?

Voici le code qui illustre le problème:

 
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)); 

L'erreur que je vois est:

WshShell.RegRead: Invalid root in registry key "HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows\CurrentVersion\SharedDlls\C:\Program Files\Common Files\ACME Corp\AcmeUtil.dll" 

Répondre

1

Le problème est dans la barre oblique ...
Vous pouvez le lire avec WMI à la place, comme décrit 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 

Aussi: Scripts to manage Registry

+0

Merci beaucoup! Cela m'aide. Notez que la méthode WMI ne fonctionnera pas en javascript car javascript ne prend pas en charge la transmission de valeurs par référence. Mais c'est bien - je vais simplement passer au script VB. –

+0

Il est possible de lire le registre avec WMI dans JScript, c'est juste moche, google "SpawnInstance_" et "ExecMethod_" – Anders

Questions connexes