首页 > 后端开发 > C++ > 32位应用程序如何访问64位Windows注册表?

32位应用程序如何访问64位Windows注册表?

Barbara Streisand
发布: 2025-01-16 19:12:13
原创
662 人浏览过

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
作者最新文章
热门教程
更多>
最新下载
更多>
网站特效
网站源码
网站素材
前端模板