注冊表基礎知識請參閱本站文章:注冊表學習教程
在應用程序安裝時,常常需要利用注冊表來登記應用程序的名字、運行路徑、用戶對應用程序的配置信息等。許多應用程序在運行時也常常需要訪問注冊表。
.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);
同樣,我們在使用該方法修改鍵值時,不用費心去分辨究竟該傳遞哪種值類型,方法將會識別是哪種類型,並把相應類型的值賦予指定的鍵。