4

レジストリキーが存在するかどうかを確認しようとすると、何を試しても「読み取り用にレジストリキーを開くことができません」というエラーメッセージが常に表示されます。

使用しているコード:

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

4 に答える 4

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);
于 2010-01-18T14:26:47.090 に答える
2

HKLM ハイブを開こうとしているのですが、おそらく WScript (またはそれを開始したユーザー) には
、regedt32 でアクセス許可を確認できるアクセス許可がありません。

于 2010-01-18T14:16:49.533 に答える
0

私が得たものは、

キーのデフォルト値が設定されていない場合は、次のように表示されますunable to open registry key '---' for reading.

現在、キーにデフォルト値があり\\、キーの後に追加していない場合も、同じエラーが発生します。

したがって、デフォルト値を取得するには、 を追加する必要があります\\。それ以外の場合は、そのキーの下に正確なキーワード リストを追加します。例: 「バージョン」、「場所」など。

于 2012-04-02T10:22:38.867 に答える
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")
于 2013-06-07T19:52:53.517 に答える