注册表基础知识请参阅本站文章:注册表学习教程
在应用程序安装时,常常需要利用注册表来登记应用程序的名字、运行路径、用户对应用程序的配置信息等。许多应用程序在运行时也常常需要访问注册表。
.Net框架结构在Microsoft.Win32名字空间内提供了两个类用于注册表操作:
Registry和RegistryKey。这两个类都是密封类,不允许被其它类继承。
Registry类中提供了7个公有的静态域,分别代表Windows注册表中的7个基本主键,它们是:
●Registry.ClassRoot,对应于HKEY_CLASSES_ROOT主键。
●Registry.CurrentUser,对应于HKEY_CURRENT_USER主键。
●Registry.LocalMachine,对应于HKEY_LOCAL_MACHINE主键。
●Registry.Users,对应于HKEY_USERS主键。
●Registry.CurrentConfig,对应于HKEY_CURRENT_CONFIG主键。
●Registry.DynDta,对应于HKEY_DYN_DATA主键。
●Registry.PerformanceData,对应于HKEY_PERFORMANCE_DATA主键。
RegistryKey类中封装了对Windows注册表的基本操作。对注册表的操作必须符合系统提供的权限,否则不能完成指定的操作,程序将抛出一个异常。
创建子键
创建子键的成员方法的原型为:
public RegistryKey CreateSubKey(string subkey);
其中,参数subkey表示要创建的子键的名字或子键的全路径名。如果创建成功,返回值就是被创建的子键,否则为null。
打开子键
打开子键的成员方法原型为:
public RegistryKey OpenSubKey(string name);
public RegistryKey OpenSubKey(string name,bool writable);
name参数表示要打开的子键名称或全路径名,Writable参数表示被打开的主键是否可以被修改。
第一个方法对打开的子键默认是只读的,如果希望对打开的主键进行写操作,使用第二个方法,并把writalbe参数值设为true.
名字空间Microsoft.Win32中还为我们提供了另一个方法,用于打开远程机器上的注册表进行操作。方法原型为:
public static RegistryKey OpenRemoteBaseKey(RegistryHive hKey,string machineName);
删除子键
DeleteSubKey方法用于删除指定的子键,方法原型为:
public void DeleteSubKey(string subkey);
使用DeleteSubKey方法时,如果子键之中还包含子键,则删除失败,并返回一个异常。如果要彻底删除子键目录,即删除子键以及子键以下的全部子键,可以使用DeleteSubKeyTree方法。该方法的原型为:
public void DeleteSubKeyTree(string subkey);
读取键值
读键的方法原型为:
public object GetValue(string name);
public object GetValue(string name,object defaultValue);
name参数表示键的名称,返回类型是一个object类型。如果方法中指定的键不存在,则方法返回一个null。我们在使用GetValue方法时,可以不必关心该键的值类型究竟是字符串、二进制还是DWORD类型,只要使用正确的返回类型就可以了。比如,我们希望读取一个字符串类型的键值,代码就可以这样写:
string s_value=key.GetValue("Type");
其中key表示一个主键。
如果不确定键值是否存在,而又不希望得到一个null返回值,那就使用第二个方法GetValue(string name,object defaultValue),其中的参数defaultValue表示默认的返回值。如果读取失败,返回值就是传递给参数defaultValue的值。
设置键值
设置键值的方法原型为:
public void SetValue(string name,object value);
同样,我们在使用该方法修改键值时,不用费心去分辨究竟该传递哪种值类型,方法将会识别是哪种类型,并把相应类型的值赋予指定的键。