在《用Visual C#讀取注冊(cè)信息》的文中,已經(jīng)介紹了用 Visual C#來(lái)讀取注冊(cè)表中的注冊(cè)信息。本文就來(lái)介紹用Visual C#對(duì)注冊(cè)表的另外一個(gè)操作,這也是一個(gè)具有破壞性的操作過(guò)程--刪除注冊(cè)信息。
在上文中已經(jīng)知道,由于Visual C#本身沒(méi)有帶類(lèi)庫(kù),他對(duì)注冊(cè)表的處理過(guò)程是通過(guò)調(diào)用.Net FrameWork SDK中的名稱空間Microsoft.Win32中封裝的二個(gè)類(lèi)來(lái)實(shí)現(xiàn)的。這二個(gè)類(lèi)就是Registry類(lèi)、RegistryKey類(lèi)。在RegistryKey類(lèi)中定義了三個(gè)方法來(lái)刪除注冊(cè)表中的注冊(cè)信息。他們分別是:DeleteSubKey ( )方法、DeleteSubKeyTree ( )方法、DeleteValue ( )方法。下面就具體介紹一下在Visual C#中如何正確使用這三個(gè)方法。
一.如何用Visual C#中調(diào)用這三個(gè)方法: 在介紹如何使用這三個(gè)方法之前,還需要重新介紹一下RegistryKey類(lèi)中的一個(gè)方法--OpenSubKey ( )方法。在上一文中已經(jīng)介紹了,此方法是打開(kāi)指定的子鍵。其實(shí)OpenSubKey( )方法有二種調(diào)用的方式:
I > .OpenSubKey ( string , subkey ) :這種調(diào)用方式是對(duì)于此子鍵只是進(jìn)行讀操作。 II > .OpenSubKey ( string subkey , Boolean writable ):當(dāng)對(duì)子鍵使用寫(xiě)操作的時(shí)候要用此種調(diào)用方法。如果在對(duì)子鍵使用了寫(xiě)操作,但仍然使用第一種調(diào)用方法,在程序運(yùn)行的時(shí)候會(huì)產(chǎn)生一個(gè)錯(cuò)誤信息。
(1). DeleteSubKey ( )方法: 此方法是刪除一個(gè)指定的子鍵,在使用此方法的時(shí)候,如果在此子鍵中還存在另外的子鍵,則會(huì)產(chǎn)生一個(gè)錯(cuò)誤信息。在程序中調(diào)用此方法有二種原型,為: I > . DeleteSubKey ( string , subkey ):這種調(diào)用方式就是直接刪除指定的子鍵。
II > . DeleteSubKey ( string subkey , Boolean info ):其中的"string"是要?jiǎng)h除的子鍵的名稱,"Boolean"參數(shù)的意思是:如果值為"True",則在程序調(diào)用的時(shí)候,刪除的子鍵不存在,則產(chǎn)生一個(gè)錯(cuò)誤信息;如果值為"False",則在程序調(diào)用的時(shí)候,刪除的子鍵不存在,也不產(chǎn)生錯(cuò)誤信息,程序依然正確運(yùn)行。所以在具體的程序設(shè)計(jì)過(guò)程中,我還是推薦使用第二種調(diào)用方法。
(2). DeleteSubKeyTree ( )方法: 此方法是徹底刪除指定的子鍵目錄,即:刪除該子鍵以及該子鍵以下的全部子鍵。由于此方法的破壞性是非常強(qiáng)的,所有在使用的時(shí)候要非常主要。在程序中調(diào)用此方法的原型就一種,為:
DeleteSubKeyTree ( string subkey ):其中"subkey"就是要徹底刪除的子鍵名稱。
(3). DeleteValue ( )方法: 此方法是刪除指定的鍵值。在程序中調(diào)用此方法的原型就一種,為: DeleteValue ( string value ):其中"value"就是要?jiǎng)h除的鍵值的名稱。 在介紹完與刪除注冊(cè)表中注冊(cè)信息有關(guān)方法后,將通過(guò)一個(gè)程序來(lái)說(shuō)明他們?cè)诔绦蛑芯唧w用法。
二. 程序設(shè)計(jì)和運(yùn)行環(huán)境以及要準(zhǔn)備的工作: I > .視窗系統(tǒng)2000服務(wù)器版
II > ..Net FrameWork SDK Beta 2版
III > .由于程序的功能是刪除指定的主鍵、子鍵和鍵值,這就需要我們?cè)谧?cè)表中先為設(shè)置好這些值的位置和名稱。具體如下: 在HKEY_LOCAL_MACHINE主鍵下面的"SOFTWARE"子鍵中建立如下子鍵和鍵值: 在"SOFTWARE"子鍵下建立"aaa"子鍵。在"aaa"子鍵下面建立"bbb"子鍵和"ddd"子鍵。在"bbb"子鍵中建立名稱為"ccc"的鍵值,鍵值的值為"ccc"。子"ddd"子鍵中建立子鍵"eee",并在此子鍵中建立一個(gè)"fff"鍵值,鍵值的值為"fff"。程序中要?jiǎng)h除的鍵值是"ccc"鍵值,要?jiǎng)h除的子鍵是"bbb",要徹底刪除的子鍵是"ddd"。具體設(shè)定如下圖所示:
點(diǎn)擊小圖放大圖01:為程序設(shè)定的注冊(cè)表結(jié)構(gòu)圖
三. 程序設(shè)計(jì)的重要步驟: 程序設(shè)計(jì)的主要步驟就是如何刪除鍵值、不包含任何子鍵的子鍵、包含子鍵的子鍵。下面就通過(guò)程序來(lái)具體說(shuō)明: (1).如何刪除鍵值。在程序中要?jiǎng)h除鍵值是"ccc"。以下就是程序中刪除此鍵值的具體語(yǔ)句。 RegistryKey hklm = Registry.LocalMachine ; RegistryKey software = hklm.OpenSubKey ( "SOFTWARE", true ) ; //打開(kāi)"SOFTWARE"子鍵 RegistryKey no1 = software.OpenSubKey ( "aaa", true ) ; //打開(kāi)"aaa"子鍵 RegistryKey no2 = no1.OpenSubKey ( "bbb" , true ) ; //打開(kāi)"bbb"子鍵 no2.DeleteValue( "ccc" ) ; //刪除名稱為"ccc"的鍵值
(2).如何刪除不包含任何子鍵的子鍵。在程序要?jiǎng)h除的子鍵是"bbb"。以下就是刪除此子鍵的具體程序代碼: RegistryKey hklm = Registry.LocalMachine ; RegistryKey software = hklm.OpenSubKey ( "SOFTWARE", true ) ; //打開(kāi)"SOFTWARE"子鍵 RegistryKey no1 = software.OpenSubKey ( "aaa", true ) ; //打開(kāi)"aaa"子鍵 no1.DeleteSubKey ( "bbb", false ); //刪除名稱為"bbb"的子鍵
(3).如何刪除包含子鍵的子鍵。在程序中要?jiǎng)h除的此子鍵是"ddd"。以下就是刪除此子鍵的具體程序代碼: RegistryKey hklm = Registry.LocalMachine ; hklm.DeleteSubKey ( "aaa", false ); RegistryKey software = hklm.OpenSubKey ( "SOFTWARE", true ) ; //打開(kāi)"SOFTWARE"子鍵 RegistryKey no1 = software.OpenSubKey ( "aaa", true ) ; //打開(kāi)"aaa"子鍵 no1.DeleteSubKeyTree ( "ddd" ); //刪除名稱為"ddd"的子鍵
四. 本文中的程序源代碼( reg.cs )以及運(yùn)行界面: reg.cs程序的主要功能就是刪除注冊(cè)表中的鍵值、不包含子鍵的子鍵和包含子鍵的子鍵。并且通過(guò)按鈕"讀取注冊(cè)表",以列表的顯示方法來(lái)及時(shí)了解刪除的情況。下圖就是程序運(yùn)行后的界面:
點(diǎn)擊小圖放大圖02:本文中程序的運(yùn)行界面
reg.cs程序源代碼如下: using System ; using System.Drawing ; using System.Collections ; using System.ComponentModel ; using System.Windows.Forms ; using System.Data ; using Microsoft.Win32 ; public class Form1 : Form { private System.ComponentModel.Container components ; private ListBox listBox1 ; private Button button1 ; private Button button2 ; private Button button3 ; private Button button4 ; public Form1 ( ) { InitializeComponent ( ) ; } //清除在程序中使用過(guò)的資源 public override void Dispose ( ) { base.Dispose ( ) ; components.Dispose ( ) ; } //初始化程序中使用到的組件 private void InitializeComponent ( ) { components = new System.ComponentModel.Container ( ) ; button1 = new Button ( ) ; button2 = new Button ( ) ; button3 = new Button ( ) ; button4 = new Button ( ) ; listBox1 = new ListBox ( ) ; button1.Location = new System.Drawing.Point ( 16 , 320 ) ; button1.Size = new System.Drawing.Size ( 75 , 23 ) ; button1.TabIndex = 0 ; button1.Text = "讀取注冊(cè)表" ; button1.Click += new System.EventHandler ( button1_Click ) ;
button2.Location = new System.Drawing.Point ( 116 , 320 ) ; button2.Size = new System.Drawing.Size ( 75 , 23 ) ; button2.TabIndex = 0 ; button2.Text = "刪除鍵值ccc" ; button2.Click += new System.EventHandler ( button2_Click ) ;
button3.Location = new System.Drawing.Point ( 216 , 320 ) ; button3.Size = new System.Drawing.Size ( 75 , 23 ) ; button3.TabIndex = 0 ; button3.Text = "刪除子鍵bbb" ; button3.Click += new System.EventHandler ( button3_Click ) ;
button4.Location = new System.Drawing.Point ( 316 , 320 ) ; button4.Size = new System.Drawing.Size ( 75 , 23 ) ; button4.TabIndex = 0 ; button4.Text = "刪除主鍵ddd" ; button4.Click += new System.EventHandler ( button4_Click ) ;
listBox1.Location = new System.Drawing.Point ( 16 , 32 ) ; listBox1.Size = new System.Drawing.Size ( 496 , 264 ) ; listBox1.TabIndex = 1 ;
this.Text = "用Visual C#來(lái)刪除注冊(cè)表中的主鍵、子鍵和鍵值!" ; this.AutoScaleBaseSize = new System.Drawing.Size ( 5 , 13 ) ; this.ClientSize = new System.Drawing.Size ( 528 , 357 ) ; this.Controls.Add ( listBox1 ) ; this.Controls.Add ( button1 ) ; this.Controls.Add ( button2 ) ; this.Controls.Add ( button3 ) ; this.Controls.Add ( button4 ) ; } protected void button1_Click ( object sender , System.EventArgs e ) { listBox1.Items.Clear ( ) ; RegistryKey hklm = Registry.LocalMachine ; RegistryKey software = hklm.OpenSubKey ( "SOFTWARE" ) ; //打開(kāi)"SOFTWARE"子鍵 RegistryKey no1 = software.OpenSubKey ( "aaa" ) ; //打開(kāi)"aaa"子鍵 foreach ( string site in no1.GetSubKeyNames ( ) ) //開(kāi)始遍歷由子鍵名稱組成的字符串?dāng)?shù)組 { listBox1.Items.Add ( site ) ; //在列表中加入子鍵名稱 RegistryKey sitekey = no1.OpenSubKey ( site ) ; //打開(kāi)此子鍵 foreach ( string sValName in sitekey.GetValueNames ( ) ) //開(kāi)始遍歷由指定子鍵擁有的鍵值名稱組成的字符串?dāng)?shù)組 { listBox1.Items.Add ( " " + sValName + ": " + sitekey.GetValue ( sValName ) ) ; //在列表中加入鍵名稱和對(duì)應(yīng)的鍵值 } } } protected void button2_Click ( object sender , System.EventArgs e ) { RegistryKey hklm = Registry.LocalMachine ; RegistryKey software = hklm.OpenSubKey ( "SOFTWARE", true ) ; //打開(kāi)"SOFTWARE"子鍵 RegistryKey no1 = software.OpenSubKey ( "aaa", true ) ; //打開(kāi)"aaa"子鍵 RegistryKey no2 = no1.OpenSubKey ( "bbb" , true ) ; //打開(kāi)"bbb"子鍵 no2.DeleteValue( "ccc" ) ; //刪除名稱為"ccc"的鍵值 } protected void button3_Click ( object sender , System.EventArgs e ) { RegistryKey hklm = Registry.LocalMachine ; RegistryKey software = hklm.OpenSubKey ( "SOFTWARE", true ) ; //打開(kāi)"SOFTWARE"子鍵 RegistryKey no1 = software.OpenSubKey ( "aaa", true ) ; //打開(kāi)"aaa"子鍵 no1.DeleteSubKey ( "bbb", false ); //刪除名稱為"bbb"的子鍵 } protected void button4_Click ( object sender , System.EventArgs e ) { RegistryKey hklm = Registry.LocalMachine ; hklm.DeleteSubKey ( "aaa", false ); RegistryKey software = hklm.OpenSubKey ( "SOFTWARE", true ) ; //打開(kāi)"SOFTWARE"子鍵 RegistryKey no1 = software.OpenSubKey ( "aaa", true ) ; //打開(kāi)"aaa"子鍵 no1.DeleteSubKeyTree ( "ddd" ); //刪除名稱為"ddd"的子鍵 } public static void Main ( ) { Application.Run ( new Form1 ( ) ) ; } }
五. 總結(jié): 本文介紹Visual C#注冊(cè)表編程的一個(gè)重要內(nèi)容,即:如何刪除注冊(cè)信息。由于刪除注冊(cè)信息是一項(xiàng)非常具有破壞性的操作,所以在操作之前一定要注意對(duì)注冊(cè)表的保護(hù)工作。
|