C#对注册表的操作
C#中提供的与注册表相关的最主要的是两个类:
Registry 和 RegistryKey,这两个类属于Microsoft.Win32命名空间
Registry类包含5个公共的静态域,分别代表5个基本主键分别是:
Registry.ClassesRoot
Registry.CurrentUser
Registry.LocalMachine
Registry.Users
Registry.Current Config
这5个类分别对应注册表的第二级目录的五个预定义主键
RegistryKey类中提供了对注册表操作的方法
CreateSubKey //建立一个子键
OpenSubKey //打开一个子键
DeleteKey //删除一个子键
DeleteKeyTree//删除一个键及其下的全部键
GetValue //获取键值
SetValue //设置键值
建立子健并设置键值的示例:
![](http://www.soaspx.comhttp://www.soaspx.comhttp://www.soaspx.com/uploads/allimg/100628/094G5MF-0.gif)
private void WTRegedit(string name,string tovalue)
RegistryKey hklm = Registry.LocalMachine;
RegistryKey software = hklm.OpenSubKey("SOFTWARE",true);
RegistryKey aimdir = software.CreateSubKey("XXX");
aimdir.SetValue(name,tovalue);
删除一个键值的示例:
![](http://www.soaspx.comhttp://www.soaspx.comhttp://www.soaspx.com/uploads/allimg/100628/094G5MF-0.gif)
private void DeleteRegist(string name)
string[] aimnames;
RegistryKey hkml = Registry.LocalMachine;
RegistryKey software = hkml.OpenSubKey("SOFTWARE",true);
aimnames = software.GetSubKeyNames();
foreach(string aimKey in aimnames)
{
if(aimKey == name)
aimdir.DeleteSubKeyTree(name);
}
说到了删除键值就必须关注另外一个问题:系统权限!直接删除一个键会触发执行未授权的操作异常
这又涉及到另外一个类RegistrySecurity,它属于System.Security.AccessControl命名空间
RegistrySecurity 对象指定了注册表项的访问权限,以及如何审核访问企图。对注册表项的访问权限体现为规则,每个访问规则由一个 RegistryAccessRule 对象表示。每个审核规则都由一个 RegistryAuditRule 对象表示
若要将访问控制安全性从一个注册表项复制到另一个注册表项,请使用 RegistryKey.GetAccessControl 方法获取表示第一个注册表项的访问规则和审核规则的 RegistrySecurity 对象,然后使用 RegistryKey.SetAccessControl 方法或一个接受 RegistrySecurity 对象的构造函数将规则指定给第二个注册表项
示例代码:
![](http://www.soaspx.comhttp://www.soaspx.comhttp://www.soaspx.com/uploads/allimg/100628/094G5MF-0.gif)
RegistrySecurity rsy = new RegistrySecurity();
RegistryAccessRule rar=new RegistryAccessRule(Environment.UserDomainName+
"\\"+Environment.UserName,RegistryRights.ReadKey|RegistryRights.WriteKey|
RegistryRights.Delete,InheritanceFlags.ContainerInherit,PropagationFlags.None,
AccessControlType.Allow);
rsy.AddAccessRule(rar);
RegistryKey cu = Registry.CurrentUser;
RegistryKey rk = cu.CreateSubKey("test1", RegistryKeyPermissionCheck.ReadWriteSubTree, rsy);
RegistryKey rky = rk.CreateSubKey("test2",RegistryKeyPermissionCheck.ReadWriteSubTree);
cu.DeleteSubKeyTree("test1");