首頁 > 後端開發 > C++ > 32位元應用程式如何存取Windows中的64位元註冊表?

32位元應用程式如何存取Windows中的64位元註冊表?

Mary-Kate Olsen
發布: 2025-01-16 19:05:10
原創
309 人瀏覽過

How Can a 32-bit Application Access the 64-bit Registry in Windows?

從 32 位元 Windows 應用程式存取 64 位元註冊表

挑戰:

32 位元應用程式在 64 位元 Windows 系統上存取 64 位元登錄時遇到困難。當從 64 位元建置伺服器上執行的 32 位元單元測試存取駐留在 64 位元登錄中的系統資訊(例如 SQL Express 實例的路徑)時,經常會出現此問題。

解:

存取 64 位元登錄:

RegistryView.Registry64 屬性提供了從 32 位元應用程式存取 64 位元註冊表的解決方案。 以下程式碼示範了這一點:

<code class="language-csharp">RegistryKey localKey = RegistryKey.OpenBaseKey(RegistryHive.LocalMachine, RegistryView.Registry64);
RegistryKey sqlServerKey = localKey.OpenSubKey(@"SOFTWARE\Microsoft\Microsoft SQL Server\Instance Names\SQL");
string sqlExpressKeyName = (string)sqlServerKey.GetValue("SQLEXPRESS");</code>
登入後複製

存取 32 位元登錄:

相反,要存取 32 位元註冊表,請使用 RegistryView.Registry32:

<code class="language-csharp">RegistryKey localKey32 = RegistryKey.OpenBaseKey(RegistryHive.LocalMachine, RegistryView.Registry32);
RegistryKey sqlServerKey32 = localKey32.OpenSubKey(@"SOFTWARE\Microsoft\Microsoft SQL Server\Instance Names\SQL");
string sqlExpressKeyName = (string)sqlServerKey32.GetValue("SQLEXPRESS");</code>
登入後複製

重要注意事項:

  • 雖然 32 位元註冊表可以透過 64 位元註冊表中的「Wow6432Node」訪問,但使用 RegistryView.Registry32 是推薦且更直接的方法。
  • Windows 7(64 位元)中的一個已知錯誤可能會導致從 32 位元程式碼存取時 RegisteredOrganization 值錯誤地傳回「Microsoft」。 64 位元代碼將傳回正確的組織。
  • GetAllRegValueNames() 函數允許檢索所有鍵名稱和值,無論註冊表視圖(32 位元或 64 位元)為何。
  • 利用空合併運算子 (??) 優雅地處理潛在的空值。

以上是32位元應用程式如何存取Windows中的64位元註冊表?的詳細內容。更多資訊請關注PHP中文網其他相關文章!

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