Rumah >pembangunan bahagian belakang >C++ >Mengapa OpenSubKey() Gagal Mendapatkan Subkunci Pendaftaran yang Dijangka pada Sistem 64-bit?
OpenSubKey() Gagal Mendapatkan Subkunci yang Dijangka daripada Registry
Apabila cuba mendapatkan semula semua nama paparan subkunci dalam laluan pendaftaran berikut:
HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows\CurrentVersion\Uninstall
menggunakan kod yang disediakan, subkunci tertentu tidak boleh diakses:
HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows\CurrentVersion\Uninstall\{DA5E371C-6333-3D8A-93A4-6FD5B20BCC6E}
Subkunci ini harus memaparkan nama "Microsoft Visual C 2010 x64 Redistributable - 10.0.30319." Walau bagaimanapun, kaedah GetSubKeyNames() mendapatkan semula subkunci yang berbeza:
{DA5E371C-6333-3D8A-93A4-6FD5B20BCC6E}.KB2151757
Sebab
Aplikasi 32-bit pada OS 64-bit akan dibaca daripada HKLMSoftwareWow6432Node nod secara lalai. Untuk menangani perkara ini dan mengakses kekunci versi 64-bit, RegistryView mesti dinyatakan:
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 }
API ini telah diperkenalkan dalam .NET 4.0. Untuk .NET 3.5, P/Invoke diperlukan:
http://www.rhyous.com/2011/01/24/how-read-the-64-bit-registry-from-a-32 -bit-application-or-vice-versa/
Atas ialah kandungan terperinci Mengapa OpenSubKey() Gagal Mendapatkan Subkunci Pendaftaran yang Dijangka pada Sistem 64-bit?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!