Heim >Backend-Entwicklung >C++ >Wie greife ich von einer 32-Bit-.NET-Anwendung aus auf 64-Bit-Registrierungsschlüssel zu?

Wie greife ich von einer 32-Bit-.NET-Anwendung aus auf 64-Bit-Registrierungsschlüssel zu?

Mary-Kate Olsen
Mary-Kate OlsenOriginal
2025-01-16 19:16:10794Durchsuche

How to Access 64-bit Registry Keys from a 32-bit .NET Application?

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!

Stellungnahme:
Der Inhalt dieses Artikels wird freiwillig von Internetnutzern beigesteuert und das Urheberrecht liegt beim ursprünglichen Autor. Diese Website übernimmt keine entsprechende rechtliche Verantwortung. Wenn Sie Inhalte finden, bei denen der Verdacht eines Plagiats oder einer Rechtsverletzung besteht, wenden Sie sich bitte an admin@php.cn