时间:2021-05-19
注册表是Microsoft Windows操作系统和其应用程序中的一个重要的层次型数据库,用于存储系统和应用程序的设置信息。由键(key,或称“项”)、子键(subkey,子项)和值项(value)构成。一个键就是树状数据结构中的一个节点,而子键就是这个节点的子节点,子键也是键。一个值项则是一个键的一条属性,由名称(name)、数据类型(datatype)以及数据(data)组成。一个键可以有一个或多个值,每个值的名称各不相同,如果一个值的名称为空,则该值为该键的默认值。
(1)、注册表的数据类型主要有以下五种:
(2)、注册表有以下5个一级分支:
(3)、注册表的存储方式:
Windows NT系列操作系统和Windows 9x系列的存储方式有很大区别。注册表被分成多个文件存储,称为Registry Hives,每一个文件被称为一个配置单元。在早期的Windows 3.x系列中,注册表仅包含一个reg.dat文件,所存放的内容后来演变为HKEY_CLASSES_ROOT分支。
Windows NT家族的配置单元文件:
Windows 9x家族的配置单元文件:
我们可以使用外部加载windows操作系统自带的Advapi32.dll 文件,实现注册表的操作。下面实例中,我们使用 .NET 平台自带的Microsoft.Win32.Registry 类库,使用的时候添加如下引用:
using Microsoft.Win32;具体操作如下:
public static class RegistryUtil { #region 创建注册表 /// <summary> /// 创建注册表项 /// </summary> /// <param name="keyPath"></param> /// <param name="parentKey"></param> /// <returns></returns> public static RegistryKey CreateRegistryKey(string keyPath, RegistryKey parentKey) { return parentKey?.CreateSubKey(keyPath); } /// <summary> /// 创建<see cref="Registry.LocalMachine">注册表项目 /// </summary> /// <param name="keyPath"></param> /// <returns></returns> public static RegistryKey CreateRegistryLocalMachine64Key(string keyPath) { return Registry.LocalMachine.CreateSubKey(keyPath); } /// <summary> /// 创建<see cref="Registry.ClassesRoot">注册表项目 /// </summary> /// <param name="keyPath"></param> /// <returns></returns> public static RegistryKey CreateRegistryClassesRootKey(string keyPath) { return Registry.ClassesRoot.CreateSubKey(keyPath); } /// <summary> /// 创建<see cref="Registry.CurrentConfig">注册表项目 /// </summary> /// <param name="keyPath"></param> /// <returns></returns> public static RegistryKey CreateRegistryCurrentConfigKey(string keyPath) { return Registry.CurrentConfig.CreateSubKey(keyPath); } /// <summary> /// 创建<see cref="Registry.CurrentUser">注册表项目 /// </summary> /// <param name="keyPath"></param> /// <returns></returns> public static RegistryKey CreateRegistryCurrentUserKey(string keyPath) { return Registry.CurrentUser.CreateSubKey(keyPath); } /// <summary> /// 创建<see cref="Registry.PerformanceData">注册表项目 /// </summary> /// <param name="keyPath"></param> /// <returns></returns> public static RegistryKey CreateRegistryPerformanceDataKey(string keyPath) { return Registry.PerformanceData.CreateSubKey(keyPath); } /// <summary> /// 创建<see cref="Registry.Users">注册表项目 /// </summary> /// <param name="keyPath"></param> /// <returns></returns> public static RegistryKey CreateRegistryUsersKey(string keyPath) { return Registry.Users.CreateSubKey(keyPath); } #endregion #region 打开注册表 /// <summary> /// 打开 <see cref="RegistryView.Registry64"/> 的 <see cref="RegistryHive.LocalMachine"/> /// </summary> /// <returns></returns> public static RegistryKey OpenLocalMachine64Key() { return RegistryKey.OpenBaseKey(Microsoft.Win32.RegistryHive.LocalMachine, RegistryView.Registry64); } /// <summary> /// 打开 <see cref="RegistryView.Registry32"/> 的 <see cref="RegistryHive.LocalMachine"/> /// </summary> /// <returns></returns> public static RegistryKey OpenLocalMachine32Key() { return RegistryKey.OpenBaseKey(Microsoft.Win32.RegistryHive.LocalMachine, RegistryView.Registry32); } /// <summary> /// 打开 <see cref="RegistryView.Registry64"/> 的 <see cref="RegistryHive.CurrentUser"/> /// </summary> /// <returns></returns> public static RegistryKey OpenCurrentUser64Key() { return RegistryKey.OpenBaseKey(Microsoft.Win32.RegistryHive.CurrentUser, RegistryView.Registry64); } /// <summary> /// 打开 <see cref="RegistryView.Registry32"/> 的 <see cref="RegistryHive.LocalMachine"/> /// </summary> /// <returns></returns> public static RegistryKey OpenCurrentUser32Key() { return RegistryKey.OpenBaseKey(Microsoft.Win32.RegistryHive.CurrentUser, RegistryView.Registry32); } /// <summary> /// 打开注册表键 /// </summary> /// <param name="rootKey"></param> /// <param name="keyPath"></param> /// <returns></returns> public static RegistryKey OpenKey(this RegistryKey rootKey, string keyPath) { return rootKey.OpenSubKey(keyPath, true); } #endregion /// <summary> /// 读取注册表值 /// </summary> /// <param name="key"></param> /// <param name="name"></param> /// <returns></returns> public static string ReadRegistryValue(this RegistryKey key, string name) { return key?.GetValue(name)?.ToString(); } /// <summary> /// 写入注册表值 /// </summary> /// <param name="key"></param> /// <param name="name"></param> /// <param name="value"></param> public static void WriteRegistryValue(this RegistryKey key, string name, string value) { key.SetValue(name, value); } /// <summary> /// 删除注册值 /// </summary> /// <param name="key"></param> /// <param name="name"></param> public static void DeleteRegistryValue(this RegistryKey key, string name) { key.DeleteValue(name); } }调试代码如下:
static void Main(string[] args) { // 写入注册表 string path = @"Software\Test\Char"; var key = RegistryUtil.CreateRegistryLocalMachine64Key(path); key.WriteRegistryValue("Name", "Dwayne"); key.WriteRegistryValue("Age", "18"); // 读取注册表 var regKey = RegistryUtil.OpenLocalMachine64Key().OpenKey(path); var name = regKey.ReadRegistryValue("Name"); var age = regKey.ReadRegistryValue("Age"); Console.WriteLine($"Name={name},Age={age}"); Console.WriteLine("Hello World!"); }以上就是如何在C# 中使用注册表的详细内容,更多关于c# 使用注册表的资料请关注其它相关文章!
声明:本页内容来源网络,仅供用户参考;我单位不保证亦不表示资料全面及准确无误,也不保证亦不表示这些资料为最新信息,如因任何原因,本网内容或者用户因倚赖本网内容造成任何损失或损害,我单位将不会负任何法律责任。如涉及版权问题,请提交至online#300.cn邮箱联系删除。
本文实例讲述了C#操作windows注册表的方法。分享给大家供大家参考。具体如下:此代码演示了如何读取和写入注册表读取注册表:privatestringGetR
非Web程序(桌面程序)的设置一般都存在注册表中。给这些程序做自动化测试时,需要经常要跟注册表打交道。通过修改注册表来修改程序的设置。本章介绍如何利用C#程序如
本文讲解了在C#程序中设置代理和取消代理的方法,原理很简单,就是通过调用C#操作注册表的相关类来对注册表的相关内容进行修改而实现的,具体源代码如下:1、启动代理
本文实例讲述了C#通过oledb访问access数据库的方法。分享给大家供大家参考。具体分析如下:这里演示了如何在C#中使用MicrosoftAccess数据库
众所周知C#提供Async和Await关键字来实现异步编程。在本文中,我们将共同探讨并介绍什么是Async和Await,以及如何在C#中使用Async和Awai