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
256 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!

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