C#讀取註冊表信息

C#讀取註冊表信息

註冊表是視窗系統的一個核心的數據庫,在這個數據庫中存放中與系統相關的各種參數,這些參數直接控制中系統的啓動、硬件的驅動程序安裝信息以及在視窗系統上運行的各種應用程序的註冊信息等。這就意味着,如果註冊表因爲某些原因受到了破壞,輕者是視窗系統啓動過程出現異常,重者就有可能導致整個系統的完全癱瘓。所以正確的認識註冊表,及時的備份註冊表,對於視窗用戶就顯得相當重要。
  C#就可以十分方便、簡潔的開發出操作註冊表的程序。單擊"開始/運行",在"打開"的後面填入"regedit"。就可以看到註冊表的數據結構了。"主鍵"是有層次結構的。主鍵的下一級主鍵稱爲該主鍵的"子鍵"。每一個主鍵可以對擁有多個子鍵。右邊的這些值就是所謂的鍵值了。每一個主鍵或者子鍵都可以擁有多個鍵值。註冊表是一個龐大的數據庫,在其中每一個主鍵,每一個鍵值都賦予了不同的功能。
  C#如何讀取註冊表中的主鍵和鍵值:在.Net FrameWork SDK Beta 2版中,有一個Microsoft.Win32的名稱空間,在此名稱空間中提供了二個用於註冊表操作的類:Registry類、RegistryKey類。這二個類都是封閉類,不可以繼承。這二個類定義了許多關於註冊表的方法和屬性,通過調用這二個類,在Visual C#中就可以比較輕鬆的處理關於註冊表的各種操作了。
  (1).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主鍵 

 

  (2).RegistryKey類:此類中主要封裝了對視窗系統註冊表的基本操作。在程序設計中,首先通過Registry類找到註冊表中的基本主鍵,然後通過RegistryKey類,來找其下面的子鍵和處理具體的操作的。
下面通過一個讀取註冊表信息例子來具體說明這二個來的用法。
程序設計和運行的環境:Windows 2000服務器版,.Net FrameWork SDK Beta 2版。
在運行程序前的一些必要的處理工作。在程序設計時,主要功能是讀取已經存在的主鍵鍵值,用戶可以新建若干個主鍵和對應的鍵值。
程序的主要功能是讀取指定主鍵下面的所有子鍵和子鍵擁有的鍵值,並以列表的形式按層次顯示出來。程序設計過程中的重要步驟以及應該注意的一些問題:
程序中讀取主鍵、子鍵和鍵值所使用到的方法: 程序中爲了讀取指定主鍵下面的子鍵和子鍵中擁有的鍵值,主要使用了RegistryKey類中的四個方法:OpenSubKey,GetSubKeyNames,GetValueNames,GetValue。具體的用法和意思如下: OpenSubKey ( string name )方法主要是打開指定的子鍵。
GetSubKeyNames ( )方法是獲得主鍵下面的所有子鍵的名稱,它的返回值是一個字符串數組。
GetValueNames ( )方法是獲得當前子鍵中的所有的鍵名稱,它的返回值也是一個字符串數組。

以下從‘讀’‘寫’‘刪除’‘判斷’四個事例實現對註冊表的簡單操作
1.讀取指定名稱的註冊表的值

以上是讀取的註冊表中HKEY_LOCAL_MACHINE\SOFTWARE目錄下的XXX目錄中名稱爲name的註冊表值;

2.向註冊表中寫數據

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); 

以上是在註冊表中HKEY_LOCAL_MACHINE\SOFTWARE目錄下新建XXX目錄並在此目錄下創建名稱爲name值爲tovalue的註冊表項;

3.刪除註冊表中指定的註冊表項

private void DeleteRegist(string name) 

string[] aimnames; 
RegistryKey hkml 
= Registry.LocalMachine; 
RegistryKey software 
= hkml.OpenSubKey("SOFTWARE",true); 
RegistryKey aimdir 
= software.OpenSubKey("XXX",true); 
aimnames 
= aimdir.GetSubKeyNames(); 
foreach(string aimKey in aimnames) 

if(aimKey == name) 
aimdir.DeleteSubKeyTree(name); 

 

以上是在註冊表中HKEY_LOCAL_MACHINE\SOFTWARE目錄下XXX目錄中刪除名稱爲name註冊表項;

4.判斷指定註冊表項是否存在

private bool IsRegeditExit(string name) 

bool _exit = false
string[] subkeyNames; 
RegistryKey hkml 
= Registry.LocalMachine; 
RegistryKey software 
= hkml.OpenSubKey("SOFTWARE",true); 
RegistryKey aimdir 
= software.OpenSubKey("XXX",true); 
subkeyNames 
= aimdir.GetSubKeyNames(); 
foreach(string keyName in subkeyNames) 

if(keyName == name) 

_exit 
= true
return _exit; 


return _exit; 

以上是在註冊表中HKEY_LOCAL_MACHINE\SOFTWARE目錄下XXX目錄中判斷名稱爲name註冊表項是否存在,這一方法在刪除註冊表時已經存在,在新建一註冊表項時也應有相應判斷。

原文地址:http://www.cnblogs.com/A_ming/archive/2011/05/03/2034877.html
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章