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

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

Linda Hamilton
Linda HamiltonOriginal
2025-01-16 19:07:10547Durchsuche

How to Access 64-Bit and 32-Bit Registry Keys from a 32-Bit Application?

Zugriff auf die 64-Bit-Registrierung von einer 32-Bit-Anwendung aus

Dank WOW64 (Windows auf Windows 64-Bit) können 32-Bit-Anwendungen auf die 64-Bit-Registrierung zugreifen. Dieses Subsystem ermöglicht den 64-Bit-Zugriff innerhalb der 32-Bit-Umgebung.

Zugriff auf den 64-Bit-Registrierungsschlüssel

Verwenden Sie RegistryView.Registry64, um auf die 64-Bit-Registrierung zuzugreifen:

<code class="language-csharp">using Microsoft.Win32;

string value64 = string.Empty;
RegistryKey localKey = RegistryKey.OpenBaseKey(RegistryHive.LocalMachine, RegistryView.Registry64);
localKey = localKey.OpenSubKey(@"SOFTWARE\Microsoft\Windows NT\CurrentVersion");
if (localKey != null)
{
    value64 = localKey.GetValue("RegisteredOrganization").ToString();
    localKey.Close();
}
Console.WriteLine($"RegisteredOrganization [64-bit]: {value64}");</code>

Zugriff auf den 32-Bit-Registrierungsschlüssel

Verwenden Sie RegistryView.Registry32, um auf die 32-Bit-Registrierung zuzugreifen:

<code class="language-csharp">string value32 = string.Empty;
RegistryKey localKey32 = RegistryKey.OpenBaseKey(RegistryHive.LocalMachine, RegistryView.Registry32);
localKey32 = localKey32.OpenSubKey(@"SOFTWARE\Microsoft\Windows NT\CurrentVersion");
if (localKey32 != null)
{
    value32 = localKey32.GetValue("RegisteredOrganization").ToString();
    localKey32.Close();
}
Console.WriteLine($"RegisteredOrganization [32-bit]: {value32}");</code>

Wichtige Überlegungen: WOW64, Registrierungspfade und Schlüsselabfragen

  • Unter 64-Bit-Windows enthält HKEY_LOCAL_MACHINESoftwareWow6432Node Werte, die von 32-Bit-Apps verwendet werden.
  • Sowohl 32-Bit- als auch 64-Bit-Anwendungen greifen aufgrund der WOW64-Umleitung wie erwartet auf HKEY_LOCAL_MACHINESoftware zu.
  • HKEY_LOCAL_MACHINESoftwareWow6432Node fehlt in älteren Windows-Versionen und 32-Bit-Windows 7.

Um Werte sowohl aus 64-Bit- als auch aus 32-Bit-Registern abzurufen (nützlich für Szenarien wie das Abrufen von SQL-Instanznamen), wird eine Union-Abfrage empfohlen:

<code class="language-csharp">public static IEnumerable<string> GetAllRegValueNames(string regPath, RegistryHive hive = RegistryHive.LocalMachine)
{
    var reg64 = GetRegValueNames(RegistryView.Registry64, regPath, hive);
    var reg32 = GetRegValueNames(RegistryView.Registry32, regPath, hive);
    var result = (reg64 != null && reg32 != null) ? reg64.Union(reg32) : (reg64 ?? reg32);
    return (result ?? new List<string>().AsEnumerable()).OrderBy(x => x);
}</code>

Dies bietet eine konsolidierte Ansicht der Registrierungswerte, unabhängig von der Architektur der Anwendung.

Das obige ist der detaillierte Inhalt vonWie greife ich von einer 32-Bit-Anwendung aus auf 64-Bit- und 32-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