Windous注册表+c#操作

这篇具有很好参考价值的文章主要介绍了Windous注册表+c#操作。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

下面将会分享注册表的基础知识及C# 读写注册表的方法

了解注册表

注册表(英语:Registry,中国大陆译作注册表,台湾、港、澳译作登录档)是Microsoft Windows操作系统和其应用程序中的一个重要的层次型数据库,用于存储系统和应用程序的设置信息。

早在Windows 3.0推出OLE技术的时候,注册表就已经出现。但是,从Windows 95开始,注册表才真正成为Windows用户经常接触的内容,并在其后的操作系统中继续沿用至今。随后推出的Windows NT是第一个从系统级别广泛使用注册表的操作系统。

前身

最初,Windows系统及应用程序的信息被存储在后缀名为ini的文本文件中,这就是注册表的前身。但是这么做有着致命弱点:因为每一个程序都会新安装一个或多个ini文件,来存储程序信息,导致信息的分布极为零乱;而且在16位系统下,ini文件的大小必须在64KB之内。所以ini文件被认为不便于使用和管理。

发布与发展

在最早出现于Windows 3.0的OLE技术出现后,微软为了存放系统中大量的软件组件信息,组织了一个reg.dat的数据库来存放这些信息。当时的注册表编辑器为16位版本的regedit.exe,功能较弱。

后来开发的Windows NT则更进一步使用相同的文件格式来存放系统的配置信息,以取代原有的ini文件。该系统为每一个用户在用户目录下创建了一个自身的注册表空间,而系统的设置被存放在系统文件夹中。由于Windows NT是一个32位操作系统,regedit.exe被升级为regedt32.exe,并增加了对权限的设置功能。

在Windows 95中,注册表首次得到广泛应用,逐渐淘汰了原有的ini文件。程序在安装时,不再将数据写入ini文件,而直接写入注册表。为了最大限度兼容旧程序,部分原来用于读写ini文件的专门API函数仍然可用,但现在是访问注册表(写入或读取)。Windows 95为了保持和Windows 3.x系列的兼容性,注册表的架构与Windows NT不同,为此专门开发了另一个32位版本的regedit.exe,它没有设置权限的功能。

在Windows 2000中,由于Windows 95家族已经深入人心,regedit.exe也得到广泛应用,相反regedt32.exe的界面相对比较丑陋,因此微软将windows 95系列的regedit.exe拿过来用。但由于移植过来的regedit.exe仍没有权限设置的功能,regedt32.exe仍然保留在系统中用作权限设置。

到Windows XP和Windows Server 2003中,regedit.exe已经增加了权限的功能,regedit32.exe由于失去作用而被剔除。同时,这个版本的注册表是64位的,这导致了一些兼容性问题,少数可以运行在旧版本Windows的程序在Windows XP中无法运作。

64位Windows的注册表

64位Windows中的注册表结构大致与32位版本相同,但32位程序的信息被放在HKEY_LOCAL_MACHINE\SOFTWARE\Wow6432Node而不是HKEY_LOCAL_MACHINE\SOFTWARE(64位程序的信息放于此处)。

数据结构

注册表由键(key,或称“项”)、子键(subkey,子项)和值项(value)构成。一个键就是树状数据结构中的一个节点,而子键就是这个节点的子节点,子键也是键。一个值项则是一个键的一条属性,由名称(name)、数据类型(datatype)以及数据(data)组成。一个键可以有一个或多个值,每个值的名称各不相同,如果一个值的名称为空,则该值为该键的默认值。

在注册表编辑器(Regedit.exe)中,数据结构显示如下,其中,notepad++.exe键是App Paths键的子键,(默认)表示该值是默认值,值名称为空,其数据类型为REG_SZ,数据值为C:\Program Files (x86)\Notepad++\notepad++.exe

Windous注册表+c#操作

数据类型

Windous注册表+c#操作
此外,注册表还有其他的数据类型,但是均不常用:

REG_DWORD_BIG_ENDIAN - DWORD 的大头版本,下面同理
REG_DWORD_LITTLE_ENDIAN
REG_FULL_RESOURCE_DESCRIPTOR
REG_QWORD - DWORD 的四字(64 位)版本
REG_FILE_NAME

注册表的分支结构

Windous注册表+c#操作

注册表的存储位置

Windous注册表+c#操作
C:\WINDOWS\SYSTEM32\CONFIG

读写注册表

命名空间:using Microsoft.Win32;
创建注册表项:CreateSubKey(name)方法
添加SubKey时候首先要打开一个表项,并设置参数为true,才能成功创建子项

//给要创建的注册表设置一个变量,使用更方便
private string RegistFileName = "test";
/// <summary>
/// 创建一个test注册表项,下面包含OpenLog,和SaveLog两个子项
/// </summary>
private void CreateRegistFile()
{  //SOFTWARE在LocalMachine分支下    RegistryKey key = Registry.LocalMachine.OpenSubKey("SOFTWARE",true);
    RegistryKey software = key.CreateSubKey(RegistFileName);
    RegistryKey test = key.OpenSubKey(RegistFileName,true);
    RegistryKey Savekey = test.CreateSubKey("SaveLog");
}


///删除注册表项:DeleteSubKey(name,true)方法
RegistryKey key = Registry.LocalMachine;
RegistryKey software = key.OpenSubKey("SOFTWARE", true);
RegistryKey test = software.OpenSubKey(RegistFileName, true);
test.DeleteSubKey("SaveLog",true);



///添加键值:SetValue(name,value)方法

/// <summary>
/// 将path写入OPenLog子项
/// </summary>
private void writeToRegistFile(string path)
{  RegistryKey key = Registry.LocalMachine;  RegistryKey software = key.OpenSubKey("SOFTWARE", true);  RegistryKey test = software.OpenSubKey(RegistFileName, true);  RegistryKey OpenPath = test.OpenSubKey("OpenLog",true);  //"name"是该键值的name,相当于一个别名,可自行设置  OpenPath.SetValue("name", path);
}

///删除键值:DeleteValue(name)方法
RegistryKey key = Registry.LocalMachine;
RegistryKey software = key.OpenSubKey("SOFTWARE", true);
RegistryKey test = software.OpenSubKey(RegistFileName, true);
RegistryKey OpenPath = test.OpenSubKey("SaveLog",true);
//删除SaveLog子项下的名为SaveLog的子键
OpenPath.DeleteValue("name");

///判断注册表项是否存在:
// <summary>
/// 判断注册表项是否存在
/// </summary>
/// <returns>bool</returns>
private bool IsRegeditItemExist()
{
  string[] subkeyNames;
  RegistryKey key = Registry.LocalMachine;
  RegistryKey software = key.OpenSubKey("SOFTWARE");
  subkeyNames = software.GetSubKeyNames();
  //在这里我是判断test表项是否存在
  foreach (string keyName in subkeyNames)
  {
    if (keyName == RegistFileName)
    {
      key.Close();
      return true;
    }
  }
  key.Close();
  return false;
}

/// <summary>
/// 判断该路径是否已经存在
/// </summary>
/// <param name="path">路径</param>
/// <returns></returns>
private bool IsRegeditKeyExit(string name)
{string[] saveSubkeyNames;

    RegistryKey key = Registry.LocalMachine;
    RegistryKey software = key.OpenSubKey("SOFTWARE", true);
    RegistryKey test = software.OpenSubKey(RegistFileName, true);
    RegistryKey Savekey = test.OpenSubKey("SaveLog", true);

  //获取该子项下的所有键值的名称saveSubkeyNames 
    saveSubkeyNames = Savekey.GetSubKeyNames();
foreach(string keyName in openSubkeyNames)
    {
        if(keyName == name)
        {
            key.Close();
            return false;
        }
    }
    key.Close();
    return true;
}

///

如果有用请点赞关注收藏文章来源地址https://www.toymoban.com/news/detail-451548.html

到了这里,关于Windous注册表+c#操作的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • [C#][]操作注册表一些注意点

    C#注册表只需要引入 using Microsoft.Win32; C#注册表操作都是通过2个类Registry和RegistryKey进行所有操作。但是有些基本注意事项经常忘记,不常用就很容易忘记。 第一,打开注册表,第2个bool参数问题: RegistryKey key = Registry.LocalMachine; RegistryKey software = key.OpenSubKey(\\\"software\\\\MyAp

    2024年02月10日
    浏览(29)
  • 【注册表】windows系统注册表常用修改方案

    打开电脑,按开始键,点击运行输入 regedit 按回车键进入注册表界面,找到如下路径: 打开电脑,按开始键,点击运行输入 regedit 按回车键进入注册表界面,找到如下路径:HKEY_CURRENT_USER/Software/Microsoft/Windows/CurrentVersion/ScreenServer.切换到Bubbles子键上单击鼠标右键执行:新建(

    2024年02月14日
    浏览(35)
  • 关于直接删除软件的文件夹内容,而没有通过系统-》设置-》应用与功能-》卸载操作的残留注册表信息,导致应用与功能卸载应用显示灰色

    关于直接删除软件的文件夹内容,而没有通过系统-》设置-》应用与功能-》卸载操作的残留注册表信息,导致应用与功能卸载应用显示灰色 计算机HKEY_LOCAL_MACHINESOFTWAREWOW6432NodeMicrosoftWindowsCurrentVersionUninstall木子李QQ9.0.6(24040) 应用与功能卸载显示灰色,之前是win10升级后也

    2024年02月12日
    浏览(40)
  • Windows与网络基础:注册表基础和注册表维护与优化

    学习目标 1.理解注册表概念 2.掌握注册表维护及优化方法 注册表是Windows操作系统、硬件设备以及客户应用程序得以正常运行和保存设置的核心“数据库”,也可以说是一个非常巨大的树状分层结构的数据库系统 注册表记录了用户安装在计算机上的软件和每个程序的相互关联

    2023年04月14日
    浏览(32)
  • 如何才能监控查看出注册表更改情况,本地组策略设置更改了哪些注册表对应值?

    Win11 专业版 HP480G7 Windows Sysinternals Suite 如何才能监控查看出注册表更改情况,本地组策略设置更改了哪些注册表对应值? 1.下载Windows Sysinternals Suite,解压找到ProcessMonitor 打开 2.先按ctrl+e capture 进行捕获监控 3.按ctrl+L 筛选一下,利用filter过滤器还可以筛选自己所要查看的对应

    2024年02月06日
    浏览(31)
  • 深入注册表监控

    注册表是windows的重要数据库,存放了很多重要的信息以及一些应用的设置,对注册表进行监控并防止篡改是十分有必要的。在64位系统下微软提供了 CmRegisterCallback 这个回调函数来实时监控注册表的操作,那么既然这里微软提供了这么一个方便的接口,病毒木马自然也会利用

    2024年02月08日
    浏览(28)
  • 【Windows基础】注册表

    注册表是Windows操作系统、硬件设备以及客户应用程序得以正常运行和保存设置的 核心\\\"数据库\\\" ,也可以说是一个非常巨大的 树状分层结构 的 数据库系统 注册表记录了用户安装在计算机上的软件和每个程序的相互关联信息,它包括了计算机的硬件配置,包括自动配置的即插

    2024年02月04日
    浏览(41)
  • Windows注册表清理

    伴随着系统运行时间不断增长,我们的电脑 注册表 中累积了许多垃圾文件。这些垃圾文件都是我们平常安装与卸载程序所留下的无用注册表信息,时间一长,垃圾文件与信息越来越多,我们电脑的运行速度越来越慢。 ​ 而且部分软件由于删除方式不对,导致一些残留注册表

    2024年02月08日
    浏览(37)
  • Reg注册表读写

    在Windows 95及其后继版本中,采用了一种叫做“注册表”的数据库来统一进行管理,将各种信息资源集中起来并存储各种配置信息。按照这一原则,Windows各版本中都采用了将应用程序和计算机系统全部配置信息容纳在一起的注册表,用来管理应用程序和文件的关联、硬件设备

    2024年02月09日
    浏览(30)
  • 玩转注册表

           很多人都认识注册表,但是几乎没人搞懂过注册表。我来带大家玩转注册表,做这篇文章就想记录一下注册表里的一些路径(难找,记不住!),本文中我会介绍一些实用的利用注册表进行内网权限维持的一个思路和方法。没学网安的,会更了解注册表;大佬就复习

    2024年02月05日
    浏览(31)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包