C#操作注册表(读写注册表)
注册表起源和作用
自Windows95以来的所有Windows版本中,注册表是包含Windows安装,用户首选项,以及已安装软件和设备的所有配置信息的核心存储库。目前,几乎所有的商用软件都使用注册表来存储这些信息,COM组件必须把它们的信息存储在注册表中,才能有客户端调用。.NET Framework引入了独立存储器的概念,通过它应用程序可以在文件中存储专用于每个用户的信息,.NET Framework将确保为每个在机器上注册的用户单独地存储数据。
注册表的库和.NET库一样复杂,它包括访问注册表的类。其中有两个类涉及注册表,即Registry和RegistryKey,这两个类都在Microsoft Win32 名称控件中。
注册表简介
注册表的层次结构非常类似于文件系统的层次结构。查看和修改注册表的内容的一般方式是使用regedit或regedt32应用程序。
在运行中输入:regedit,可以看到如下界面:
NET 注册表类
要访问注册表,就可以使用Registry和RegistryKey。
RegistryKey实例表示一个注册表键。这个类实现的方法可以浏览子键,创建新键,读取或修改键中的值。换句话说,通过这类可以实现对注册建所有的操作,包括设置键的安全级别。
Registry类只能对注册表键进行单一的访问,以执行简单的操作。Registry类的另一个作用是提供表示顶级键的RegistryKey实例,以便开始在注册表中定位。Registry通过静态属性来提供这些实例。
那么接下来先介绍一下Registry 类
作用:提供了 RegistryKey 表示 Windows 注册表中的根键的对象和 static 方法,以访问键/值对。
Registry方法
名称 | 说明 |
---|---|
GetValue(String, String, Object) | 检索与指定的注册表项中具有指定名称关联的值。 如果未在指定的键中找到的名称,将返回你提供一个默认值或 null 如果指定的键不存在。 |
SetValue(String, String, Object) | 设置指定的注册表项指定的名称/值对。 如果指定的键不存在,则创建它。 |
SetValue(String, String, Object, RegistryValueKind) | 使用指定的注册表数据类型的指定的注册表项设置的名称/值对。 如果指定的键不存在,则创建它。 |
Registry字段
名称 | 说明 |
---|---|
ClassesRoot | 定义文档以及与这些类型相关联的属性类型 (或类)。 此字段中读取的 Windows 注册表基项 HKEY_CLASSES_ROOT。 |
CurrentConfig | 包含与不是特定于用户的硬件相关的配置信息。 此字段中读取的 Windows 注册表基项 HKEY_CURRENT_CONFIG。 |
CurrentUser | 包含有关当前用户首选项的信息。 此字段中读取的 Windows 注册表基项 HKEY_CURRENT_USER |
DynData | 已过时。 包含动态注册表数据。 此字段中读取的 Windows 注册表基项 HKEY_DYN_DATA。 |
LocalMachine | 包含为本地计算机的配置数据。 此字段中读取的 Windows 注册表基项 HKEY_LOCAL_MACHINE。 |
PerformanceData | 包含软件组件的性能信息。 此字段中读取的 Windows 注册表基项 HKEY_PERFORMANCE_DATA。 |
Users | 包含有关默认用户配置信息。 此字段中读取的 Windows 注册表基项 HKEY_USERS。 |
备注
此类提供在运行 Windows 的计算机上的注册表中找到的标准的根键的集合。 注册表是有关应用程序、 用户和默认的系统设置的信息存储设施。 例如,应用程序可以使用注册表来存储信息,必须关闭该应用程序之后, 被保留并重新加载应用程序时访问这些信息。 例如,您可以存储颜色首选项、 屏幕位置或窗口的大小。 通过将信息存储在注册表中的其他位置,可以控制每个用户的此数据。
基或根 RegistryKey 实例公开的 Registry 类描述的子项和值在注册表中的基本存储机制。 所有键都是只读的因为注册表取决于它们存在。
通过公开的项 Registry 是︰
名称 | 说明 |
---|---|
ClassesRoot | 存储有关类型 (类) 的信息以及它们的属性。 |
CurrentConfig | 将存储非特定于用户的硬件信息。 |
CurrentUser | 存储有关用户首选项的信息。 |
DynData | 将动态数据存储。 |
LocalMachine | 存储在本地计算机的配置信息。 |
PerformanceData | 存储软件组件的性能的信息。 |
Users | 存储有关默认用户配置信息。 |
一旦确定要在其下存储/检索信息从注册表的根密钥,您可以使用 RegistryKey 类来添加或删除子项,并处理给定键的值。
硬件设备可以将信息放在使用自动插接口注册表中。 用于安装设备驱动程序软件可以通过写入到标准 Api 在注册表中放信息。
用于获取和设置值的静态方法
在.NET Framework 2.0 版中, Registry 类还包含 staticGetValue 和 SetValue 用于设置和从注册表项中检索值的方法。 这些方法都将打开和关闭注册表项的每个使用它们,因此它们不会执行的时间以及中的类似方法 RegistryKey 类,当您访问大量的值。
RegistryKey 类还提供了允许您设置的注册表项,以进行检索之前,测试一个值的数据类型并删除注册表项的 Windows 访问控制安全性的方法。
示例
示例 1
下面的代码示例演示如何检索 HKEY_USERS 项的子项并打印到屏幕的名称。 使用 OpenSubKey 方法来创建感兴趣的特定子项的一个实例。 然后,可以使用中的其他操作 RegistryKey 来操作该注册表项。
1 | using System; |
示例 2
下面的代码示例将多个数据类型的值存储在一个示例键中创建密钥,因为它这样做了,然后检索并显示的值。 该示例演示如何存储和检索默认 (无名) 的名称/值对,以及如何使用 defaultValue 名称/值对不存在时。
1 | using System; |
RegistryKey 类
C#注册表项的创建,打开与删除
1:创建
创建注册表项主要用到RegistryKey 的CreateSubKey()方法。如:
1 | RegistryKey key = Registry.LocalMachine; |
2:打开
打开注册表项主要用到RegistryKey 的OpenSubKey()方法。如:
注意,如果该注册表项不存在,这调用这个方法会抛出异常
1 | RegistryKey key = Registry.LocalMachine; |
3:删除
删除注册表项主要用到RegistryKey 的DeleteSubKey()方法。如:
1 | RegistryKey key = Registry.LocalMachine; |
注意,如果该注册表项不存在,这调用这个方法会抛出异常
键值的创建(设置值、修改),读取和删除
1:创建(设置值、修改)
对键值的创建修改等操作主要用到RegistryKey 的SetValue()方法
1 | RegistryKey key = Registry.LocalMachine; |
2:读取
1 | string info = ""; |
info结果为:博客园
3:删除
1 | RegistryKey delKey = Registry.LocalMachine.OpenSubKey("Software\\test", true); |
细心的读者可能发现了第二个例子中OpenSubKey()方法参数与其他例子的不同。
如果你要修改键值,包括创建、设置、删除键值等都要在方法后面加个布尔参数,设置为true,表示可写可改;如果仅仅只是读取键值可以不加,此时可写关闭,你不能再往里写值(当然,你要加也可以true)!
还有读者提到读写默认键值的问题,主要在设置、读取的方法中将键名置空则就是对默认键值的操作。
如:
software.SetValue(“”, “博客园”); // 在HKEY_LOCAL_MACHINE\SOFTWARE\test修改默认键值的值为“博客园”。读取类似!
另外,默认的键值是不能删除的,所以不要用DeleteValue()方法去删除,会抛出异常的!
判断注册表项是否存在
1 | private bool IsRegeditItemExist() |
四:判断键值是否存在这里写代码片
1 | private bool IsRegeditKeyExit() |
相关链接(侵删)
欢迎到公众号来唠嗑: