惯性聚合 高效追踪和阅读你感兴趣的博客、新闻、科技资讯
阅读原文 在惯性聚合中打开

推荐订阅源

博客园 - 司徒正美
M
MIT News - Artificial intelligence
博客园_首页
IT之家
IT之家
L
LangChain Blog
D
DataBreaches.Net
Cyber Security Advisories - MS-ISAC
Cyber Security Advisories - MS-ISAC
Google DeepMind News
Google DeepMind News
Blog — PlanetScale
Blog — PlanetScale
人人都是产品经理
人人都是产品经理
博客园 - Franky
云风的 BLOG
云风的 BLOG
罗磊的独立博客
量子位
G
Google Developers Blog
freeCodeCamp Programming Tutorials: Python, JavaScript, Git & More
博客园 - 【当耐特】
博客园 - 叶小钗
S
SegmentFault 最新的问题
Stack Overflow Blog
Stack Overflow Blog
B
Blog
T
Tailwind CSS Blog
A
About on SuperTechFans
让小产品的独立变现更简单 - ezindie.com
让小产品的独立变现更简单 - ezindie.com

博客园 - 云起

ArcGISPro SDK Addin打包机制 一次 ArcGISPro Addin项本地化的排查实录 记一次arm机器装系统的经历 记一次vs中无法找到win sdk的问题 arcpy运行时,报错产品许可尚未初始化 Visual Studio 2022生成解决方案代码图报错“无法连接到指定的数据库” win10下定制文件夹 excel中,根据文件名查询文件路径 ArcGISPro SDK 3.1版本中使用QueuedTask的小问题 Compress-Archive压缩zip包的小瑕疵 Pro更新字段别名,重载数据后失效 在多个office文档内替换关键字 git日志分组 xlst处理时命名空间带来的小坑 更新压缩流 使用excel生成简单的日历 微软中文输入法带来的一点小坑,导致arcgispro输入中文异常 使用C#获取文件详情 Pro更改启动界面 使用AES加密时,结果不一样 pg_index
命令行程序读取注册表失败的分析
云起 · 2024-07-17 · via 博客园 - 云起

构建了一个命令行程序,使用Registry类进行注册表读取,但key获取的值为空。

var keyPath = @"key";
var valueName = "value";
using (RegistryKey key = Registry.LocalMachine.OpenSubKey(keyPath))
{
    if (key != null)
    {
        // 读取注册表项下的值
        var vl= key.GetValue(valueName);
        Console.WriteLine(vl);
    }
}

Win32Native.RegOpenKeyEx返回的值为2,根据错误信息,对应的是ERROR_FILE_NOT_FOUND

查看了一下注册表,键值是存在的,那估计就是读取位置的问题。更改下代码:

var keyPath = @"key";
var valueName = "value";
var lm = RegistryKey.OpenBaseKey(RegistryHive.LocalMachine, RegistryView.Registry64);
using (RegistryKey key = lm.OpenSubKey(keyPath))
{
    if (key != null)
    {
        var vl= key.GetValue(valueName);
        Console.WriteLine(vl);
    }
}

这样就可以读取了。

但为什么console程序,会读取32位注册表信息呢?

查看了下源码,Registry.LocalMachine使用的RegistryView位default,而没有进行指定Registry64/Registry32。推测是根据程序架构设定进行匹配。当前构建时候,使用的是Any CPU。如果更改为x64架构,使用第一段代码,也是能得到结果的。

但Any CPU为何会构建32位的程序呢?

查看项目的属性面板,在生成属性下,目标平台是Any CPU,并且默认勾选了首选32位。就是这个选项,影响了程序架构。

到此,算是结案了。