首頁 > 後端開發 > C++ > 為什麼 OpenSubKey() 在 64 位元系統上無法檢索預期的登錄子項目?

為什麼 OpenSubKey() 在 64 位元系統上無法檢索預期的登錄子項目?

DDD
發布: 2025-01-05 11:07:39
原創
822 人瀏覽過

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

OpenSubKey() 無法從登錄機碼擷取所需的子項

嘗試擷取下列登錄路徑中的所有子項目顯示名稱時:

HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows\CurrentVersion\Uninstall
登入後複製

使用提供的程式碼,特定子項不是可存取:

HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows\CurrentVersion\Uninstall\{DA5E371C-6333-3D8A-93A4-6FD5B20BCC6E}
登入後複製

此子項目應顯示名稱「Microsoft Visual C 2010 x64 Redistributable - 10.0.30319」。但是,GetSubKeyNames() 方法會擷取不同的子項:

{DA5E371C-6333-3D8A-93A4-6FD5B20BCC6E}.KB2151757
登入後複製

原因

64 位元作業系統上的32 位元應用程式將從HKLMSoftWow6432Node 讀取節點。要解決此問題並存取金鑰的 64 位元版本,必須指定RegistryView:

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 是在 .NET 4.0 中引入的。對於.NET 3.5,需要P/Invoke:

http://www.rhyous.com/2011/01/24/how-read-the-64-bit-registry-from-a-32 -位元應用程式或反之亦然/

以上是為什麼 OpenSubKey() 在 64 位元系統上無法檢索預期的登錄子項目?的詳細內容。更多資訊請關注PHP中文網其他相關文章!

來源:php.cn
本網站聲明
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn
熱門教學
更多>
最新下載
更多>
網站特效
網站源碼
網站素材
前端模板