2010-01-18 4 views
4

им пытается проверить, если ключ реестра существует и независимо от того, что я стараюсь я всегда получаю сообщение об ошибке «Не удается открыть раздел реестра для чтения»проверки, если ключ реестра существует с WScript

кода им с помощью:

keyPath = "HKEY_LOCAL_MACHINE\\SOFTWARE\\BOS\\BOSaNOVA TCP/IP\\Set 1\\Cfg\\Sign On\\"; 

try 
{ 
    var shell = new ActiveXObject("WScript.Shell"); 
    var regValue = shell.RegRead(keyPath); 

    shell = null; 
} 
catch(err) 
{ 

} 

что-то не хватает здесь?

ответ

7

Вы, вероятно, необходимо удалить слэш. Если вы используете это, он будет искать значение по умолчанию для указанного вами ключа, и если он его не найдет, это приведет к ошибке.

И наоборот, если вы попытаетесь получить доступ к ключу, как если бы это было значение, не используя конечную косую черту, вы получите ту же ошибку.

Некоторые примеры пытаются доступа к ключу:

Сбой:

var keyPath = "HKEY_LOCAL_MACHINE\\SOFTWARE\\Microsoft\\Windows\\CurrentVersion"; 
var shell = new ActiveXObject("WScript.Shell"); 
var regValue = shell.RegRead(keyPath); 
WScript.Echo("Value: " + regValue); 

преуспевает (но дает пустой результат, так как значение по умолчанию пусто):

var keyPath = "HKEY_LOCAL_MACHINE\\SOFTWARE\\Microsoft\\Windows\\CurrentVersion\\"; 
var shell = new ActiveXObject("WScript.Shell"); 
var regValue = shell.RegRead(keyPath); 
WScript.Echo("Value: " + regValue); 

Некоторые примеры, пытающиеся получить доступ к значению:

преуспевает (выход Value: C:\Program Files):

var keyPath = "HKEY_LOCAL_MACHINE\\SOFTWARE\\Microsoft\\Windows\\CurrentVersion\\ProgramFilesDir"; 
var shell = new ActiveXObject("WScript.Shell"); 
var regValue = shell.RegRead(keyPath); 
WScript.Echo("Value: " + regValue); 

Сбой (не следует использовать завершающего слэша, когда доступ к значению):

var keyPath = "HKEY_LOCAL_MACHINE\\SOFTWARE\\Microsoft\\Windows\\CurrentVersion\\ProgramFilesDir\\"; 
var shell = new ActiveXObject("WScript.Shell"); 
var regValue = shell.RegRead(keyPath); 
WScript.Echo("Value: " + regValue); 
+0

im пытается прочитать раздел реестра. и, как вы написали в своем примере, вы можете видеть, что im использует конечную косую черту без везения. , чтобы убедиться, что я попробовал и без косой черты, и это явно не получилось. что я могу попробовать дальше? – kisin

+0

Если вы пытаетесь прочитать «ключ», а не «значение» (разница здесь: http://en.wikipedia.org/wiki/Windows_Registry), тогда он будет искать значение «Default». Если у вас его нет, вы получите сообщение об ошибке. – RedFilter

+0

Если вы действительно пытаетесь прочитать «значение» (оно отображается в правой части в «RegEdit'), тогда не должно быть косой черты. – RedFilter

2

вы пытаетесь открыть HKLM улей и, вероятно, WScript (или пользователя, запустить его) не имеют права доступа к этой
вы можете посмотреть на разрешениях с regedt32

+0

им пытаются прочитать мой собственный регистрационный ключ. Какие разрешения мне нужны? – kisin

0

Что я есть,

Если значение по умолчанию для ключа не установлено, оно скажет unable to open registry key '---' for reading.

Теперь, если ключ имеет значение по умолчанию и вы не добавляете \\ после ключа, то также вы получите ту же ошибку.

Итак, чтобы получить значение по умолчанию, вы должны добавить \\, в противном случае добавить точный список ключевых слов под этим ключом. например «Версия», «Место» и т.д.

0

VBScript с одной задней косой черты и лидирующий слэш в конце для ключевых работ для меня:

On Error Resume Next 
Set WSHShell = CreateObject("WScript.Shell") 
s = WSHShell.RegRead("HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Office\Word\") 

if Err.Number <> 0 then 
    MsgBox(Err.Description) 
    MsgBox("Office is not installed?") 
    exit Function 
Else  
    MsgBox("Office is installed") 
    exit Function 
    ''wscript.quit 
End If 
MsgBox("xxxxxxxxxxxxxxxxx") 
Смежные вопросы