Heim >Backend-Entwicklung >C++ >Warum kann OpenSubKey() den erwarteten Registrierungsunterschlüssel auf einem 64-Bit-System nicht abrufen?

Warum kann OpenSubKey() den erwarteten Registrierungsunterschlüssel auf einem 64-Bit-System nicht abrufen?

DDD
DDDOriginal
2025-01-05 11:07:39840Durchsuche

Why Does OpenSubKey() Fail to Retrieve the Expected Registry Subkey on a 64-bit System?

OpenSubKey() kann den erwarteten Unterschlüssel nicht aus der Registrierung abrufen

Beim Versuch, alle Unterschlüssel-Anzeigenamen im folgenden Registrierungspfad abzurufen:

HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows\CurrentVersion\Uninstall

Mit dem bereitgestellten Code ist ein bestimmter Unterschlüssel nicht vorhanden zugänglich:

HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows\CurrentVersion\Uninstall\{DA5E371C-6333-3D8A-93A4-6FD5B20BCC6E}

Dieser Unterschlüssel sollte den Namen „Microsoft Visual C 2010 x64 Redistributable – 10.0.30319“ anzeigen. Die GetSubKeyNames()-Methode ruft jedoch einen anderen Unterschlüssel ab:

{DA5E371C-6333-3D8A-93A4-6FD5B20BCC6E}.KB2151757

Ursache

Eine 32-Bit-Anwendung auf einem 64-Bit-Betriebssystem liest vom HKLMSoftwareWow6432Node Knoten standardmäßig. Um dieses Problem zu beheben und auf die 64-Bit-Version des Schlüssels zuzugreifen, muss RegistryView angegeben werden:

using (var hklm = RegistryKey.OpenBaseKey(RegistryHive.LocalMachine, RegistryView.Registry64))
using (var key = hklm.OpenSubKey(@"SOFTWARE\Microsoft\Windows\CurrentVersion\Uninstall"))
{
   // key now points to the 64-bit key
}

Diese API wurde in .NET 4.0 eingeführt. Für .NET 3.5 ist P/Invoke erforderlich:

http://www.rhyous.com/2011/01/24/how-read-the-64-bit-registry-from-a-32 -bit-Anwendung-oder-umgekehrt/

Das obige ist der detaillierte Inhalt vonWarum kann OpenSubKey() den erwarteten Registrierungsunterschlüssel auf einem 64-Bit-System nicht abrufen?. 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