Heim >Backend-Entwicklung >C++ >Wie greife ich von einer 32-Bit-.NET-Anwendung aus auf 64-Bit-Registrierungsschlüssel zu?
Zugriff auf 64-Bit-Registrierungseinträge aus einer 32-Bit-.NET-Anwendung
Der Zugriff auf die 64-Bit-Registrierung von einer 32-Bit-Anwendung, die auf einem 64-Bit-Windows-System ausgeführt wird, erfordert einen bestimmten Ansatz. Glücklicherweise bieten .NET Framework 4.x und spätere Versionen dafür integrierte Unterstützung.
Nutzung von RegistryView für den 64-Bit-Registrierungszugriff
Die Aufzählung RegistryView
ist der Schlüssel zur Unterscheidung zwischen 32-Bit- und 64-Bit-Registrierungszugriff. So verwenden Sie es:
<code class="language-csharp">// Access the 64-bit registry using Microsoft.Win32; RegistryKey localKey64 = RegistryKey.OpenBaseKey(RegistryHive.LocalMachine, RegistryView.Registry64); RegistryKey sqlServerKey64 = localKey64.OpenSubKey(@"SOFTWARE\Microsoft\Microsoft SQL Server\Instance Names\SQL"); // Access the 32-bit registry RegistryKey localKey32 = RegistryKey.OpenBaseKey(RegistryHive.LocalMachine, RegistryView.Registry32); RegistryKey sqlServerKey32 = localKey32.OpenSubKey(@"SOFTWARE\Microsoft\Microsoft SQL Server\Instance Names\SQL");</code>
Bestimmte Registrierungswerte abrufen
Um einen bestimmten Wert wie „SQLEXPRESS“ unter dem Schlüssel „Instance NamesSQL“ abzurufen, verwenden Sie:
<code class="language-csharp">string sqlExpressKeyName = (string)sqlServerKey64.GetValue("SQLEXPRESS");</code>
Umfassender Schlüsselabruf: Kombination von 32-Bit- und 64-Bit-Ergebnissen
In Situationen, in denen Daten sowohl von 32-Bit- als auch von 64-Bit-Registrierungsspeicherorten benötigt werden, ist eine kombinierte Abfrage von Vorteil:
<code class="language-csharp">using System.Linq; IEnumerable<string> GetAllRegValueNames(string regPath) { var reg64 = GetRegValueNames(RegistryView.Registry64, regPath); var reg32 = GetRegValueNames(RegistryView.Registry32, regPath); var result = (reg64 != null && reg32 != null) ? reg64.Union(reg32) : (reg64 ?? reg32); return (result ?? new List<string>().AsEnumerable()).OrderBy(x => x); }</code>
Wobei GetRegValueNames
eine Hilfsfunktion ist (nicht gezeigt, aber leicht zu implementieren), die Wertnamen unter einem bestimmten Schlüssel abruft. regPath
gibt den Registrierungspfad an.
Beispielverwendung:
<code class="language-csharp"> var sqlRegPath = @"SOFTWARE\Microsoft\Microsoft SQL Server\Instance Names\SQL"; foreach (var keyName in GetAllRegValueNames(sqlRegPath)) { Console.WriteLine(keyName); } ``` This iterates through all found keys, regardless of whether they reside in the 32-bit or 64-bit registry hive.</code>
Das obige ist der detaillierte Inhalt vonWie greife ich von einer 32-Bit-.NET-Anwendung aus auf 64-Bit-Registrierungsschlüssel zu?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!