Rumah > pembangunan bahagian belakang > C++ > Mengapa Aplikasi 32-bit Saya Tidak Boleh Mengakses Kunci Pendaftaran 64-bit HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows\CurrentVersion\Uninstall?

Mengapa Aplikasi 32-bit Saya Tidak Boleh Mengakses Kunci Pendaftaran 64-bit HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows\CurrentVersion\Uninstall?

DDD
Lepaskan: 2025-01-05 16:19:41
asal
178 orang telah melayarinya

Why Can't My 32-bit Application Access the 64-bit Registry Key HKEY_LOCAL_MACHINESOFTWAREMicrosoftWindowsCurrentVersionUninstall?

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);
}
Salin selepas log masuk

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
}
Salin selepas log masuk

Untuk .NET 3.5, anda boleh menggunakan P/Invoke untuk mengakses kekunci 64-bit. Rujuk dokumentasi di pautan berikut untuk arahan terperinci:

http://www.rhyous.com/2011/01/24/how-read-the-64-bit-registry-from-a- Aplikasi-32-bit-atau-sebaliknya/

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!

sumber:php.cn
Kenyataan Laman Web ini
Kandungan artikel ini disumbangkan secara sukarela oleh netizen, dan hak cipta adalah milik pengarang asal. Laman web ini tidak memikul tanggungjawab undang-undang yang sepadan. Jika anda menemui sebarang kandungan yang disyaki plagiarisme atau pelanggaran, sila hubungi admin@php.cn
Tutorial Popular
Lagi>
Muat turun terkini
Lagi>
kesan web
Kod sumber laman web
Bahan laman web
Templat hujung hadapan