2012-03-24 1 views
2

次のコマンドを実行すると、rKeyには2つの値があります。レジストリとレジストリハイブの違い

次のいずれかのコマンドを(同じユーザーと同じマシン上で)実行すると、値は見つかりません。

RegistryKey sqlServer64 = RegistryKey.OpenBaseKey(RegistryHive.LocalMachine, RegistryView.Registry64); 

    RegistryKey sqlServer32 = RegistryKey.OpenBaseKey(RegistryHive.LocalMachine, RegistryView.Registry32); 

誰でもハイブとハイブの説明を私に指摘できますか?

編集:私はその後、IS何 :すべてRegistryKeysについては

StringBuilder sbKeys = new StringBuilder(); 

    foreach (var key in sqlServer.GetValueNames()) 
    { 
     sbKeys.AppendLine(key); 
    } 

。 sqlServerの場合、2つの値が表示されます.sqlServer32とSqlServer64には値がありません。

+4

あなたは 'sqlServer64'と' sqlServer'で何をしているのかを示す必要があります。 '@" SOFTWARE \ Microsoft \ Microsoft SQL Server "はどこにありますか? –

+1

次にOpenSubKey()を使用する必要があります。 –

+0

@David私は自分のポジションを更新しました –

答えて

1

2番目の亜種の問題は、サブキーを開くことができなかったことです。 sqlServer.GetValueNames()コールは、特定のハイブのルートレベルで動作します。

あなたはそれがこのようなことする必要があります。

RegistryKey root = RegistryKey.OpenBaseKey(RegistryHive.LocalMachine, RegistryView.Registry64); 
RegistryKey sqlServer = root.OpenSubKey(@"SOFTWARE\Microsoft\Microsoft SQL Server"); 
foreach (var key in sqlServer.GetValueNames()) 
{ .... } 

はそれが(離れてレジストリビューから)あなたの第一の変形と何ら変わりません。この方法を完了。私は適切なレジストリビューを使用すると、あなたのother questionへの解決につながると期待しています。

もちろん、上記のコードにエラーチェックを追加することをおすすめします。

+0

Davidさん、ありがとうございました。私はHansのコメントからヒントを取り、すでに愚かになりました。受け入れはハンスに行くだろうが! –

関連する問題