Heim >Backend-Entwicklung >C++ >Warum kann meine 32-Bit-Anwendung nicht auf den 64-Bit-Registrierungsschlüssel HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows\CurrentVersion\Uninstall zugreifen?
Registrierungsschlüssel kann in OpenSubKey() nicht geöffnet werden
Beim Versuch, Anzeigenamen für Unterschlüssel innerhalb des Registrierungsschlüssels HKEY_LOCAL_MACHINESOFTWAREMicrosoftWindowsCurrentVersionUninstall mithilfe des Codes abzurufen :
RegistryKey newKey; string val; string KeyPath64Bit = @"SOFTWARE\Microsoft\Windows\CurrentVersion\Uninstall"; RegistryKey mainKey = Registry.LocalMachine.OpenSubKey(KeyPath64Bit); string[] RegKeys64Bits = Registry.LocalMachine.OpenSubKey(KeyPath64Bit).GetSubKeyNames(); foreach (string s in RegKeys64Bits) { newKey = mainKey.OpenSubKey(s); val = newKey.GetValue("DisplayName", -1, RegistryValueOptions.None).ToString(); if (val != "-1") file64.WriteLine(val); }
Ein bestimmter Unterschlüssel, {DA5E371C-6333-3D8A-93A4-6FD5B20BCC6E} bleibt schwer zu fassen. Stattdessen gibt GetSubKeyNames() {DA5E371C-6333-3D8A-93A4-6FD5B20BCC6E}.KB2151757 zurück, einen Unterschlüssel, dem ein Anzeigename fehlt.
Ursache:
Auf einem 64-Bit-Betriebssystem, eine 32-Bit-Anwendung von Standardmäßig wird auf den Registrierungsschlüssel HKLMSoftwareWow6432Node zugegriffen. Um die 64-Bit-Version des Schlüssels abzurufen, der den gewünschten Unterschlüssel enthält, müssen Sie RegistryView.Registry64 angeben.
Lösung:
In .NET 4.0 und höher Sie können den 64-Bit-Registrierungsschlüssel mithilfe der RegistryView-Eigenschaft öffnen:
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 }
Für .NET 3.5 können Sie P/Invoke verwenden, um auf 64-Bit-Schlüssel zuzugreifen. Detaillierte Anweisungen finden Sie in der Dokumentation unter dem folgenden Link:
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 meine 32-Bit-Anwendung nicht auf den 64-Bit-Registrierungsschlüssel HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows\CurrentVersion\Uninstall zugreifen?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!