C#操作注册表
2015-08-12 14:30
597 查看
一.注册表巢在注册表中,最上面的节点是注册表巢(registryhive)。HKEY_CLASSES_ROOT(HKCR)包含系统文件类型的细节,以及应用程序可以打开的文件类型,它还包含所有COM组件的注册信息。HKEY_CURRENT_USER(HKCU)包含用户目前登陆的机器的用户配置,包括桌面设置、环境变量、网络和打印机连接和其他定义用户操作环境的变量。HKEY_LOCAL_MACHINE(HKLM)是一个很大的巢,其中包含所有安装到机器上的软件和硬件的信息。HKEY_USERS(HKUSR)包含所有用户的用户配置。HKEY_CURRENT_CONFIG(HKCF)包含机器上硬件的信息。二.注册表类及常用属性和函数
usingMicrosoft.Win32;
这个命名空间包含了注册表相关的类。Registry类、RegistryKey类。
Registry类封装了注册表的七个基本主键:
Registry.ClassesRoot | 对应于HKEY_CLASSES_ROOT主键 |
Registry.CurrentUser | 对应于HKEY_CURRENT_USER主键 |
Registry.LocalMachine | 对应于HKEY_LOCAL_MACHINE主键 |
Registry.User | 对应于HKEY_USER主键 |
Registry.CurrentConfig | 对应于HEKY_CURRENT_CONFIG主键 |
Registry.DynDa | 对应于HKEY_DYN_DATA主键 |
Registry.PerformanceData | 对应于HKEY_PERFORMANCE_DATA主键 |
RegistryKey类封装了对注册表的基本操作。包括读、写、删等操作的常用函数:
Name | 键的名称(只读) |
SubKeyCount | 键的子键个数 |
ValueCount | 键包含的值的个数 |
Close() | 关闭键 |
CreateSubKey() | 创建给定名称的子键 |
DeleteSubKey() | 删除指定的子键 |
DeleteSubKeyTree() | 递归删除子键及其所有的子键 |
DeleteValue() | 从键中删除一个指定的值 |
GetAccessControl() | 返回指定注册表键的访问控制表 |
GetSubKeyNames() | 返回包含子键名称的字符串数组 |
GetValue() | 返回指定的值 |
GetValueKind() | 返回指定的值,检索其注册表数据类型 |
GetValueNames() | 返回一个包含所有键值名称的字符串数组 |
OpenSubKey() | 返回表示给定子键的RegistryKey实例引用 |
SetAccessControl() | 把访问控制表(ACL)应用于指定的注册表键 |
SetValue() | 设置指定的值 |
三注册表项的创建、打开、删除1,创建
//使用CreateSubKey()在SOFTWARE下创建子项testRegistryKeyhklm=Registry.LocalMachine;RegistryKeyhkSoftWare=hklm.CreateSubKey(@"SOFTWARE\test");hklm.Close();hkSoftWare.Close();2,打开
//使用OpenSubKey()打开项,获得RegistryKey对象,当路径不存在时,为Null。第二个参数为true,表示可写,可读,可删;省略时只能读。RegistryKeyhklm=Registry.LocalMachine;RegistryKeyhkSoftWare=hklm.OpenSubKey(@"SOFTWARE\test",true);hklm.Close();hkSoftWare.Close();3,删除
//主要用到了DeleteSubKey(),删除test项RegistryKeyhklm=Registry.LocalMachine;hklm.DeleteSubKey(@"SOFTWARE\test",true);//为true时,删除的注册表不存在时抛出异常;当为false时不抛出异常。hklm.Close();四、注册表键值的创建、打开和删除1,创建
//主要用到了SetValue(),表示在test下创建名称为Name,值为RegistryTest的键值。第三个参数表示键值类型,省略时,默认为字符串RegistryKeyhklm=Registry.LocalMachine;RegistryKeyhkSoftWare=hklm.OpenSubKey(@"SOFTWARE\test",true);hkSoftWare.SetValue("Name","RegistryTest",RegistryValueKind.String);hklm.Close();hkSoftWare.Close();2,打开
//主要用到了GetValue(),获得名称为"Name"的键值RegistryKeyhklm=Registry.LocalMachine;RegistryKeyhkSoftWare=hklm.OpenSubKey(@"SOFTWARE\test",true);stringsValue=hkSoftWare.GetValue("Name").ToString();hklm.Close();hkSoftWare.Close();3,删除
//主要用到了DeleteValue(),表示删除名称为"Name"的键值,第二个参数表示是否抛出异常RegistryKeyhklm=Registry.LocalMachine;RegistryKeyhkSoftWare=hklm.OpenSubKey(@"SOFTWARE\test",true);hkSoftWare.DeleteValue("Name",true);hklm.Close();hkSoftWare.Close();五、判断注册表项、注册表键值是否存在
//判断注册表项是否存在privateboolIsRegistryKeyExist(stringsKeyName){string[]sKeyNameColl;RegistryKeyhklm=Registry.LocalMachine;RegistryKeyhkSoftWare=hklm.OpenSubKey(@"SOFTWARE");sKeyNameColl=hkSoftWare.GetSubKeyNames();//获取SOFTWARE下所有的子项foreach(stringsNameinsKeyNameColl){if(sName==sKeyName){hklm.Close();hkSoftWare.Close();returntrue;}}hklm.Close();hkSoftWare.Close();returnfalse;}//判断键值是否存在privateboolIsRegistryValueNameExist(stringsValueName){string[]sValueNameColl;RegistryKeyhklm=Registry.LocalMachine;RegistryKeyhkTest=hklm.OpenSubKey(@"SOFTWARE\test");sValueNameColl=hkTest.GetValueNames();//获取test下所有键值的名称foreach(stringsNameinsValueNameColl){if(sName==sValueName){hklm.Close();hkTest.Close();returntrue;}}hklm.Close();hkTest.Close();returnfalse;}六、程序自启动程序
//开启程序自启动stringpath=Application.ExecutablePath;RegistryKeyrk=Registry.LocalMachine;RegistryKeyrk2=rk.CreateSubKey(@"Software\Microsoft\Windows\CurrentVersion\Run");rk2.SetValue("JcShutdown",path);rk2.Close();rk.Close();//关闭程序自启动stringpath=Application.ExecutablePath;RegistryKeyrk=Registry.LocalMachine;RegistryKeyrk2=rk.CreateSubKey(@"Software\Microsoft\Windows\CurrentVersion\Run");rk2.DeleteValue("JcShutdown",false);rk2.Close();rk.Close();
相关文章推荐
- c# byte转化为string
- C# class and struct
- c#解析XML文件来获得pascal_voc特定目标负样本
- 总结C#保留小数位数
- C#中的委托和事件(续)
- C# 中的委托和事件
- C#实现Ping的方法小结
- C#实现xml文件的读取与写入简单实例
- C#实现将数据导出到word或者Excel中的方法
- C#异步方法的使用
- *****c#中的委托和事件
- C#学习If-else
- C#操作Excel文件
- c#params ref out
- c#params ref out
- C#学习第四天
- C#线程池ThreadPool
- C# DataRow[]转换DataTable
- c#用socket异步传输字符串
- c#用socket异步传输字符串