在 C# 中操作注册表
在 C# 中注册表的基本操作主要包括读取注册表中的信息、创建和修改注册表信息以及删除注册表中的信息。
读取注册表中的信息
读取注册表中的信息主要是通过 RegistryKey 类中的 OpenSubKey 方法、GetSubKeyNames 方法和 GetValueNames 方法实现的。
1. OpenSubKey 方法
该方法用于检索指定的子项。
public Registry OpenSubKey(string name)
- name:要以只读方式打开的子项的名称或路径。
- 返回值:请求的子项;如果操作失败,则为空引用。
说明:如果要打开的项不存在,该方法将返回 null 引用,而不是引发异常 。
【例1】使用 OpenSubKey 方法打开 HKEY_LOCAL_MACHINE\SOFTWARE 子键。
private void Form1_Load(object sender, EventArgs e)
{
RegistryKey regkey = Registry.LocalMachine; //创建 RegistryKey 实例
//使用 OpenSubKey 方法打开 HKEY_LOCAL_MACHINE\SOFTWARE 键
Registry registrykey = regkey.OpenSubKey(@"SOFTWARE");
}
2. GetSubKeyNames 方法
该方法用于检索包含所有子项名称的字符串数组。
public string[] GetSubKeyNames()
- 返回值:包含当前项的子项名称的字符串数组。
说明:如果当前项已被删除,或是用户没有读取该项的权限,将触发异常。
【例2】 创建一个 Windows 应用程序,通过 GetSubKeyNames 方法检索 HKEY_LOCAL_MACHINE\SOFTWARE 子键下包含的所有子项名称的字符串数组。
//添加 using Microsoft.Win32;命名空间
private void Form1_Load(object sender, EventArgs e)
{
RegistryKey regkey = Registry.LocalMachine; //创建 RegistryKey 实例
//使用 OpenSubKey 方法打开 HKEY_LOCAL_MACHINE\SOFTWARE 键
RegistryKey sys = regkey.OpenSubKey(@"SOFTWARE");
//调用 foreach 语句读取 HKEY_LOCAL_MACHINE\SOFTWARE 键下的所有项目
foreach(string str in System.GetSubKeyNames())
{
richTextBox1.Text += str + "\n";
}
}
3. GetValueNames 方法
该方法用于检索包含与该项关联的所有值名称的字符串数组。
public string[] GetValueNames()
- 返回值:包含当前的值名称的字符串数组。
说明:如果没有找到该项的值名称,则返回一个空数组。如果在注册表项设置了一个具有默认值的名称为空字符串的项,则 GetValueNames 方法返回值的数组中包含该空字符串。
【例3】 创建一个 Windows 应用程序,读取 方法检索 HKEY_LOCAL_MACHINE\SOFTWARE 子键下的项目信息。首先通过 Registry 类实例化一个 RegistryKey 类对象,然后利用对象的 OpenSubKey 方法打开指定的键,最后通过循环将所有键值全部提取出来并显示在 ListBox 控件中。
//添加 using Microsoft.Win32;命名空间
private void Form1_Load(object sender, EventArgs e)
{
this.listBox1.ltems.clear(); //清除 listBox1 控件中的值
RegistryKey regkey = Registry.LocalMachine; //创建 RegistryKey 实例
//使用 OpenSubKey 方法打开 HKEY_LOCAL_MACHINE\SOFTWARE 键
RegistryKey sys = regkey.OpenSubKey(@"SOFTWARE");
//使用两个 foreach 语句检索 HKEY_LOCAL_MACHINE\SOFTWARE 键下的所有项目
foreach(string str in System.GetSubKeyNames())
{
this.listBox1.ltems.Add("子项名:" + str);
RegistryKey sikey = sys.OpenSubKey(str); //打开子健
foreach(string sVName in sikey.GetValueNames())
{
this.listBox1.ltems.Add(sVName+sikey.GetValue(sVName));
}
}
}