Rumah >pembangunan bahagian belakang >C++ >Mengapa OpenSubKey() Gagal Mendapatkan Subkunci Pendaftaran yang Dijangka pada Sistem 64-bit?

Mengapa OpenSubKey() Gagal Mendapatkan Subkunci Pendaftaran yang Dijangka pada Sistem 64-bit?

DDD
DDDasal
2025-01-05 11:07:39791semak imbas

Why Does OpenSubKey() Fail to Retrieve the Expected Registry Subkey on a 64-bit System?

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!

Kenyataan:
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