2012-03-24 3 views
2

Wenn ich den folgenden Befehl ausführen, rKey hat zwei Werte.Was ist der Unterschied in der Registrierung und Registrierung Hives

RegistryKey sqlServer = Registry.LocalMachine.OpenSubKey(@"SOFTWARE\Microsoft\Microsoft SQL Server", false); 

Wenn ich eine der beiden folgenden Befehle (auf der gleichen Maschine wie der gleiche Benutzer) laufen finde ich keine Werte;

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

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

Kann mir jemand auf die Antwort oder eine Beschreibung der Hives vs plain Registrierungszugriff verweisen?

Edit: Was ich tue, ist danach:

StringBuilder sbKeys = new StringBuilder(); 

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

Für alle RegistryKeys. Für sqlServer sehe ich zwei Werte, für sqlServer32 und SqlServer64 gibt es keine Werte.

+4

Sie müssen zeigen, was Sie mit 'sqlServer64' und' sqlServer' machen. Wo kommt '@" SOFTWARE \ Microsoft \ Microsoft SQL Server "in die zweite Variante? –

+1

Sie müssen als nächstes OpenSubKey() verwenden. –

+0

@David Ich habe mein POSRT aktualisiert –

Antwort

1

Das Problem in Ihrer zweiten Variante ist, dass Sie einen Unterschlüssel nicht öffnen konnten. Ihr Anruf sqlServer.GetValueNames() funktioniert auf der Stammebene einer bestimmten Struktur.

Sie müssen es so sein:

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

diese Weise getan, es ist nicht anders als die erste Variante (abgesehen von der Registrierungsansicht). Ich erwarte, dass die Verwendung der entsprechenden Registrierungsansicht zur Lösung Ihrer other question führt.

Natürlich möchten Sie eine Fehlerüberprüfung zum obigen Code hinzufügen.

+0

Danke David, ich habe den Tipp von Hans 'Kommentar zu meinem Beitrag genommen und bin schon blöd gefallen (und danach das Problem behoben). Obwohl das Akzeptieren an Hans geht! –