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注冊表項是否存在,這一方法在刪除注冊表時已經存在,在新建一注冊表項時也應有相應判斷。


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM