首页 > 编程语言 >命令行程序读取注册表失败的分析

命令行程序读取注册表失败的分析

时间:2024-07-17 18:30:33浏览次数:8  
标签:读取 注册表 命令行 key valueName var keyPath

构建了一个命令行程序,使用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位。就是这个选项,影响了程序架构。

到此,算是结案了。

标签:读取,注册表,命令行,key,valueName,var,keyPath
From: https://www.cnblogs.com/GISyunqi/p/18308071

相关文章

  • Google Colab 云端硬盘路径读取
    加载云端硬盘需要在左上角点击这个文件图标;fromgoogle.colabimportdrivedrive.mount("/content/drive")#挂载云端硬盘importospath="/content/drive/MyDrive/TextClassificationCustom"os.chdir(path)#以路径path作为当前工作目录os.listdir(path)curre......
  • Mac电脑硬盘无法读取怎么办 Mac硬盘读取慢会导致电脑卡吗
    Mac电脑作为众多用户的工作与生活伙伴,其稳定性和效率至关重要。然而,当遭遇硬盘无法读取或读取速度缓慢的问题时,这无疑会给用户带来极大的不便,影响日常操作与数据访问。下面我们来看看Mac电脑硬盘无法读取怎么办,Mac硬盘读取慢会导致电脑卡吗的相关内容。一、Mac电脑硬盘无法读......
  • Linux命令行指令大全(Ⅰ)
    前言:     首先,我们需要明白为什么要掌握linux命令行指令。因为在日常生活中我们最为熟悉的还是windows操作系统和IOS操作系统,所以为了能对Linux操作系统可以更方便的使用,所以我们需要掌握相关的指令来让开发的过程更加便捷。    此外在本文中像ls,cd,pwd这几个......
  • mysql命令行操作显示表属性的类型与修改
        随着工具的进步,类似于Navicat这些可以让mysql具备可视化的软件越来越多。但是为了安全性,并非每一个都可以使用这些工具进行连接,因此掌握一定的mysql命令基础是必备的,本文主要是讲述一下如何查看表中,各个属性的类型,以及如何对其进行修改操作。一:对表进行查询  ......
  • C++(2) 从yml或者txt读取和保存数据
      %YAML:1.0---gps:"2132312" CMakeLists.txtcmake_minimum_required(VERSION3.5)set(CMAKE_CXX_STANDARD11)#设置项目名称和语言project(run_nodeLANGUAGESCXX)#设置opencv安装路径#set(CMAKE_PREFIX_PATH"/home/r9000k/v1_software/opencv/o......
  • Windows 注册表编辑器(regedit)的演变和发展主要是由 Microsoft Windows 操作系统的设计
    Windows注册表编辑器(regedit)的演变和发展主要是由MicrosoftWindows操作系统的设计和需求驱动的。下面是大致的演化过程:需求和设计:在早期的Windows系统中,配置信息分散存储在各种配置文件和INI文件中,管理起来不够方便。为了统一管理系统配置信息,并提高系统的灵活性和可维......
  • [libjpeg-turbo]读取一张raw图(NV12格式),利用libjpeg-turbo压缩为jpg图像。并统计耗时
    笔者在网上找到了很多关于图像压缩库的使用,其中包括libjpeg和libjpeg-turbo,后者据说是在前者的基础上改进了算法,速度提升很大。然而,真正去搜索libjpeg-turbo时,还是会有很多内容是libjpeg的,导致最初误以为是turbo版,结果耗时较大。最终,折腾了几天,重新改用了turbo的接口,安装了新......
  • 设计模式学习(二)工厂模式——抽象工厂模式+注册表
    设计模式学习(二)工厂模式——抽象工厂模式+注册表前言使用简单工厂改进使用注册表改进参考文章前言在上一篇文章中我们提到了抽象工厂模式初版代码的一些缺点:①客户端违反开闭原则②提供方违反开闭原则。本文将针对这两点进行讨论使用简单工厂改进对于缺点①,我们可......
  • 关于 Scanner 类读取输入时换行符处理及不同方法的差异总结
    Scannerscanner=newScanner(System.in);System.out.print("请输入一个整数:");intnum=scanner.nextInt();System.out.print("请输入一个字符串:");Stringstr=scanner.nextLine();请输入一个整数:5......
  • DOS命令行
    DOS命令行CMD的方式开始+系统+命令提示符Win键+R输入CMD打开控制台适用任意文件夹下面按住Shift+鼠标右击点击+在此处打开命令行窗口在资源管理器地址栏加上CMD路径管理员方式运行:选择以管理员方式运行常用的DOS命令盘符切换:D:查看文件所有目录:dir切换......