Heim >Backend-Entwicklung >C++ >Warum gibt OpenSubKey() Null für einen in Regedit sichtbaren Registrierungsschlüssel zurück?
Beim Versuch, Unterschlüssel-Anzeigenamen innerhalb des Registrierungsschlüssels HKEY_LOCAL_MACHINESOFTWAREMicrosoftWindowsCurrentVersionUninstall abzurufen, können Benutzer auf ein Problem stoßen, bei dem Die OpenSubKey()-Methode gibt Null für einen bestimmten Unterschlüssel zurück, der im Registrierungseditor sichtbar ist (regedit.exe).
Die zugrunde liegende Ursache liegt in der Standardregistrierungsansicht, die von 32-Bit-Anwendungen auf 64-Bit-Betriebssystemen verwendet wird. Standardmäßig greifen diese Anwendungen auf den Knoten HKLMSoftwareWow6432Node zu, der 32-Bit-Registrierungsschlüssel enthält. Um die 64-Bit-Version des Schlüssels zu lesen, muss beim Öffnen des Basisschlüssels RegistryView angegeben werden.
Um dieses Problem zu beheben, verwenden Sie den folgenden Code:
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 }
Dies Der Code stellt sicher, dass der Registrierungsschlüssel in der 64-Bit-Ansicht geöffnet wird und ermöglicht den Zugriff auf den gewünschten Unterschlüssel und seinen Anzeigenamen.
Alternativ für .NET 3.5-Benutzer müssen auf P/Invoke zurückgreifen, um auf 64-Bit-Schlüssel zuzugreifen, wie in der in der ursprünglichen Antwort bereitgestellten Ressource beschrieben.
Das obige ist der detaillierte Inhalt vonWarum gibt OpenSubKey() Null für einen in Regedit sichtbaren Registrierungsschlüssel zurück?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!