проверьте, существует ли раздел реестра с WScript - PullRequest
4 голосов
/ 18 января 2010

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

код, который я использую:

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

}

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

Ответы [ 4 ]

7 голосов
/ 18 января 2010

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

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

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

Сбой:

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);
2 голосов
/ 18 января 2010

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

0 голосов
/ 07 июня 2013

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")
0 голосов
/ 02 апреля 2012

То, что я получил,

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

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

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

...