首頁 > 後端開發 > C++ > 為什麼 OpenSubKey() 對於 Regedit 中可見的註冊表項回傳 Null?

為什麼 OpenSubKey() 對於 Regedit 中可見的註冊表項回傳 Null?

Mary-Kate Olsen
發布: 2025-01-05 18:39:40
原創
564 人瀏覽過

Why Does OpenSubKey() Return Null for a Registry Key Visible in Regedit?

OpenSubKey() 對Regedit.exe 中可見的登錄項目傳回Null

嘗試擷取登錄項目HKEY_LOCAL_MACHINESOFTWAREMicrosoftCurrentVersion遇到以下問題: OpenSubKey()方法對於登錄編輯器中可見的特定子項傳回 null (regedit.exe)。

根本原因在於 64 位元作業系統上 32 位元應用程式所使用的預設登錄視圖。預設情況下,這些應用程式存取 HKLMSoftwareWow6432Node 節點,該節點包含 32 位元註冊表項。要讀取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
}
登入後複製

這個程式碼確保使用 64 位元檢視開啟註冊表項,從而允許存取所需的子項及其顯示名稱。

或者,對於.NET 3.5 用戶,需要藉助 P/Invoke 來存取 64 位元金鑰,如原始答案中提供的資源所述。

以上是為什麼 OpenSubKey() 對於 Regedit 中可見的註冊表項回傳 Null?的詳細內容。更多資訊請關注PHP中文網其他相關文章!

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