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

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

Barbara Streisand
發布: 2025-01-16 19:12:13
原創
705 人瀏覽過

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

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

當32位元應用程式在64位元Windows系統上執行時,它只能存取HKEY_LOCAL_MACHINESoftwareWow6432Node下的登錄項目。但是,在某些情況下,需要存取64位元註冊表。

解決方法:

使用.NET Framework 4.x及更高版本:

.NET Framework 4.x及更高版本提供了RegistryView枚舉,允許直接存取64位元和32位元註冊表項。以下是操作方法:

存取64位元登錄:

<code class="language-csharp">using Microsoft.Win32;

RegistryKey localKey = RegistryKey.OpenBaseKey(RegistryHive.LocalMachine, RegistryView.Registry64);
// 对64位注册表执行操作</code>
登入後複製

存取32位元登錄:

<code class="language-csharp">RegistryKey localKey = RegistryKey.OpenBaseKey(RegistryHive.LocalMachine, RegistryView.Registry32);
// 对32位注册表执行操作</code>
登入後複製

替代方法:

對於需要同時存取64位元和32位元登錄項目的情況,可以使用以下方法:

<code class="language-csharp">// 获取64位和32位节点的所有注册表值
var mergedValues = RegistryKey.OpenBaseKey(RegistryHive.LocalMachine, RegistryView.Registry64).GetValues()
    .Concat(RegistryKey.OpenBaseKey(RegistryHive.LocalMachine, RegistryView.Registry32).GetValues());

// 获取64位和32位节点的所有注册表项
var mergedKeys = RegistryKey.OpenBaseKey(RegistryHive.LocalMachine, RegistryView.Registry64).GetSubKeyNames()
    .Concat(RegistryKey.OpenBaseKey(RegistryHive.LocalMachine, RegistryView.Registry32).GetSubKeyNames());</code>
登入後複製

注意:

  • 由於Windows的WOW64子系統(在64位元系統上模擬32位元操作), 讀取64位元登錄是可能的。
  • 在Windows 7中,存在一個bug,無論實際值如何,32位元程式碼版本始終為RegisteredOrganization傳回「Microsoft」。
  • 在32位元版本的Windows中,不存在WOW6432Node子樹。

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

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