c# 注册表操作
c# 注册表操作一、注册表中预定义主键
1、HKEY_CLASSES_ROOT
该主键包含了文件的扩展名和应用程序的关联信息以及Window Shell和OLE用于储存注册表的信息。该主键下的子键决定了在WINDOWS中如何显示该类文件以及他们的图标,该主键是从HKEY_LCCAL_MACHINE\SOFTWARE\Classes映射过来的。
2、HKEY_CURRENT_USER
该主键包含了如用户窗口信息,桌面设置等当前用户的信息。
3、HKEY_LOCAL_MACHINE
主键包含了计算机软件和硬件的安装和配置信息,该信息可供所有用户使用
4、HKEY_USERS
该主键记录了当前用户的设置信息,每次用户登入系统时,就会在该主键下生成一个与用户登入名一样的子键,该子键保存了当前用户的桌面设置、背景位图、快捷键,字体等信息。一般应用程序不直接访问改主键,而是通过主键HKEY_CURRENT_USER进行访问。
5、HKEY_CURRENT_CONFIG
该主键保存了计算机当前硬件的配置信息,这些配置可以根据当前所连接的网络类型或硬件驱动软件安装的改变而改变。
二、C#中对注册表操作的支持
1、.NET框架在Microsoft.Win32名字空间中提供了两个类来操作注册表:Registry和RegistryKey。这两个类都是密封类不允许被继承。
2、Registry类提供了几个公共的静态域,分别代表基本主键分别是:Registry.ClassesRoot,Registry.CurrentUser,Registry.LocalMachine,Registry.Users,Registry.CurrentConfig。
3、RegistryKey类中提供了对注册表操作的方法。
4、要注意的是操作注册表必须符合系统权限,否则将会抛出错误。
三、用C#写的一个注册表操作类
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using Microsoft.Win32;
namespace TagReceiver
{
class RegistryHelper
{
/// <summary>
/// 读取指定名称的注册表的值
/// </summary>
/// <param name="name"></param>
/// <returns></returns>
public string GetRegistryData(RegistryKey root, string subkey, string name)
{
string registData = "";
RegistryKey myKey = root.OpenSubKey(subkey, true);
if (myKey != null)
{
registData = myKey.GetValue(name).ToString();
}
return registData;
}
/// <summary>
/// 向注册表中写数据
/// </summary>
/// <param name="name"></param>
/// <param name="tovalue"></param>
public void SetRegistryData(RegistryKey root, string subkey, string name, string value)
{
RegistryKey aimdir = root.CreateSubKey(subkey);
aimdir.SetValue(name, value);
}
/// <summary>
/// 删除注册表中指定的注册表项
/// </summary>
/// <param name="name"></param>
public void DeleteRegist(RegistryKey root, string subkey, string name)
{
string[] subkeyNames;
RegistryKey myKey = root.OpenSubKey(subkey, true);
subkeyNames = myKey.GetSubKeyNames();
foreach (string aimKey in subkeyNames)
{
if (aimKey == name)
myKey.DeleteSubKeyTree(name);
}
}
/// <summary>
/// 判断指定注册表项是否存在
/// </summary>
/// <param name="name"></param>
/// <returns></returns>
public bool IsRegistryExist(RegistryKey root, string subkey, string name)
{
bool _exit = false;
string[] subkeyNames;
RegistryKey myKey = root.OpenSubKey(subkey, true);
subkeyNames = myKey.GetSubKeyNames();
foreach (string keyName in subkeyNames)
{
if (keyName == name)
{
_exit = true;
return _exit;
}
}
return _exit;
}
/// <summary>
/// 判断键值是否存在
/// </summary>
private bool IsRegeditKeyExit()
{
string[] subkeyNames;
RegistryKey hkml = Registry.LocalMachine;
RegistryKey software = hkml.OpenSubKey("SOFTWARE\\\\test");
//RegistryKey software = hkml.OpenSubKey("SOFTWARE\\\\test", true);
subkeyNames = software.GetValueNames();
//取得该项下所有键值的名称的序列,并传递给预定的数组中
foreach (string keyName in subkeyNames)
{
if (keyName == "test") //判断键值的名称
{
hkml.Close();
return true;
}
}
hkml.Close();
return false;
}
}
}