Heim >Backend-Entwicklung >C++ >Warum kann OpenSubKey() den erwarteten Registrierungsunterschlüssel auf einem 64-Bit-System nicht abrufen?
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!