当前位置: 首页 > news >正文

.NET/C# 在 64 位进程中读取 32 位进程重定向后的注册表

我们知道,32 位程序在读取注册表的时候,会自动将注册表的路径映射到 32 位路径下,即在 Wow6432Node 子节点下。但是 64 位程序不会映射到 32 位路径下。那么 64 位程序如何读取到 32 位程序写入的注册表路径呢?


本文内容

    • Wow6432Node
    • 如何在 64 位程序中读取 32 位注册表路径
    • Walterlv.Win32

Wow6432Node

Wow6432Node

对于 32 位程序,读取注册表路径的时候,会读到 Wow6432Node 节点下的项:

32 位

这张图读取的就是前面截图中的节点。

那么怎样编译的程序是 32-bit 的程序呢?

x86

AnyCPU 32-bit preferred

对于 64 位程序,读取的时候就不会有 Wow6432Node 路径部分。由于我没有在那个路径放注册表项,所以会得到 null

null

那么怎样编译的程序是 64-bit 的程序呢?

x64

AnyCPU

如何在 64 位程序中读取 32 位注册表路径

前面我们的例子代码是这样的:

var value = RegistryHive.LocalMachine.Read(@"SOFTWARE\Walterlv");

可以看到,相同的代码,在 32 位和 64 位进程下得到的结果是不同的:

  • 32 位进程在 32 位系统上,64 位进程在 64 位系统上,读取的路径会是传入的路径;
  • 32 位进程在 64 位系统上,读取的路径会包含 Wow6432Node

那么如何在 64 位进程中读取 32 位注册表路径呢?

方法是在打开注册表项的时候,传入 RegistryView.Registry32

RegistryKey.OpenBaseKey(root, RegistryView.Registry32);

Walterlv.Win32

可以在我的 GitHub 仓库中查看完整的实现。当然,除了上面那句话,其他都不是关键代码,在哪里都可以找得到的。


参考资料

  • c# - Reading the registry and Wow6432Node key - Stack Overflow

我的博客会首发于 https://blog.walterlv.com/,而 CSDN 会从其中精选发布,但是一旦发布了就很少更新。

如果在博客看到有任何不懂的内容,欢迎交流。我搭建了 dotnet 职业技术学院 欢迎大家加入。

知识共享许可协议

本作品采用知识共享署名-非商业性使用-相同方式共享 4.0 国际许可协议进行许可。欢迎转载、使用、重新发布,但务必保留文章署名吕毅(包含链接:https://walterlv.blog.csdn.net/),不得用于商业目的,基于本文修改后的作品务必以相同的许可发布。如有任何疑问,请与我联系。

相关文章:

  • C#/.NET 当我们在写事件 += 和 -= 的时候,方法是如何转换成事件处理器的
  • 清理 git 仓库太繁琐?试试 bfg!删除敏感信息删除大文件一句命令搞定(比官方文档还详细的使用说明)
  • 可集成到文件管理器,一句 PowerShell 脚本发布某个版本的所有 NuGet 包
  • Windows 系统的默认字体是什么?应用的默认字体是什么?
  • C# 8.0 的可空引用类型,不止是加个问号哦!你还有很多种不同的可空玩法
  • 一个简单的方法:截取子类名称中不包含基类后缀的部分
  • 使用 MSBuild Target 复制文件的时候如何保持文件夹结构不变
  • 如何在 MSBuild 中正确使用 % 来引用每一个项(Item)中的元数据
  • 如何将一个 .NET 对象序列化为 HTTP GET 的请求字符串
  • 屏幕边缘上有趣的 1 个像素,看不见、摸不到
  • 在 MSBuild 编译过程中操作文件和文件夹(检查存在/创建文件夹/读写文件/移动文件/复制文件/删除文件夹)
  • 在 WPF 程序中应用 Windows 10 真•亚克力效果
  • 推荐 .NET/C# 开发者安装的几款代码分析插件或对应的代码分析 NuGet 包
  • 在 HTML 超链接上添加可交互的 ToolTip
  • 在移动端打开 Google 的网页快照
  • CSS盒模型深入
  • java8-模拟hadoop
  • js 实现textarea输入字数提示
  • JS+CSS实现数字滚动
  • JS专题之继承
  • LeetCode29.两数相除 JavaScript
  • Lucene解析 - 基本概念
  • mysql 数据库四种事务隔离级别
  • PHP 小技巧
  • Spring Cloud(3) - 服务治理: Spring Cloud Eureka
  • Vue ES6 Jade Scss Webpack Gulp
  • vue 配置sass、scss全局变量
  • Vue 重置组件到初始状态
  • Vue2.0 实现互斥
  • vue--为什么data属性必须是一个函数
  • 从零开始的webpack生活-0x009:FilesLoader装载文件
  • 理解IaaS, PaaS, SaaS等云模型 (Cloud Models)
  • 买一台 iPhone X,还是创建一家未来的独角兽?
  • 如何使用 OAuth 2.0 将 LinkedIn 集成入 iOS 应用
  • 如何正确配置 Ubuntu 14.04 服务器?
  • 优秀架构师必须掌握的架构思维
  • d²y/dx²; 偏导数问题 请问f1 f2是什么意思
  • No resource identifier found for attribute,RxJava之zip操作符
  • FaaS 的简单实践
  • MyCAT水平分库
  • ​一些不规范的GTID使用场景
  • #!/usr/bin/python与#!/usr/bin/env python的区别
  • #define,static,const,三种常量的区别
  • #单片机(TB6600驱动42步进电机)
  • #中国IT界的第一本漂流日记 传递IT正能量# 【分享得“IT漂友”勋章】
  • (function(){})()的分步解析
  • (剑指Offer)面试题34:丑数
  • (排序详解之 堆排序)
  • (深度全面解析)ChatGPT的重大更新给创业者带来了哪些红利机会
  • (五)c52学习之旅-静态数码管
  • (转)详解PHP处理密码的几种方式
  • (转载)VS2010/MFC编程入门之三十四(菜单:VS2010菜单资源详解)
  • (转载)利用webkit抓取动态网页和链接
  • (自适应手机端)响应式新闻博客知识类pbootcms网站模板 自媒体运营博客网站源码下载
  • .NET CF命令行调试器MDbg入门(四) Attaching to Processes