Tidak Dapat Membuka Kunci Pendaftaran dalam OpenSubKey()
Apabila cuba mendapatkan semula nama paparan untuk subkunci dalam kunci pendaftaran HKEY_LOCAL_MACHINESOFTWAREMicrosoft kod:
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); }
Satu subkunci khusus, {DA5E371C-6333-3D8A-93A4-6FD5B20BCC6E}, masih sukar difahami. Sebaliknya, GetSubKeyNames() mengembalikan {DA5E371C-6333-3D8A-93A4-6FD5B20BCC6E}.KB2151757, subkunci yang tidak mempunyai nama paparan.
Punca:
Oleh: Sistem pengendalian 64-bit, a Aplikasi 32-bit secara lalai mengakses kunci pendaftaran HKLMSoftwareWow6432Node. Untuk mendapatkan semula versi 64-bit kunci yang mengandungi subkunci yang diingini, anda perlu menentukan RegistryView.Registry64.Penyelesaian:
Dalam .NET 4.0 dan ke atas, anda boleh membuka kunci pendaftaran 64-bit menggunakan RegistryView property: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 }
Atas ialah kandungan terperinci Mengapa Aplikasi 32-bit Saya Tidak Boleh Mengakses Kunci Pendaftaran 64-bit HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows\CurrentVersion\Uninstall?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!