设为首页收藏本站language 语言切换
查看: 1229|回复: 0
收起左侧

用Visual C#来删除注册表中的注册信息

[复制链接]
发表于 2010-2-25 10:21:34 | 显示全部楼层 |阅读模式
<p >在《用Visual C#读取注册信息》的文中,已经介绍了用 Visual C#来读取注册表中的注册信息。本文就来介绍用Visual C#对注册表的另外一个操作,这也是一个具有破坏性的操作过程--删除注册信息。<p >在上文中已经知道,由于Visual C#本身没有带类库,他对注册表的处理过程是通过调用.Net FrameWork SDK中的名称空间Microsoft.Win32中封装的二个类来实现的。这二个类就是Registry类、RegistryKey类。在RegistryKey类中定义了三个方法来删除注册表中的注册信息。他们分别是:DeleteSubKey ( )方法、DeleteSubKeyTree ( )方法、DeleteValue ( )方法。下面就具体介绍一下在Visual C#中如何正确使用这三个方法。<p ><ccid_nobr><b>一.如何用Visual C#中调用这三个方法:</b></ccid_nobr><p >在介绍如何使用这三个方法之前,还需要重新介绍一下RegistryKey类中的一个方法--OpenSubKey ( )方法。在上一文中已经介绍了,此方法是打开指定的子键。其实OpenSubKey( )方法有二种调用的方式:<p ><ccid_nobr><ul><li>OpenSubKey (string , subkey) :这种调用方式是对于此子键只是进行读操作。<li>OpenSubKey (string subkey, Boolean writable):当对子键使用写操作的时候要用此种调用方法。如果在对子键使用了写操作,但仍然使用第一种调用方法,在程序运行的时候会产生一个错误信息。</ul></ccid_nobr><p ><ccid_nobr><ol><li>DeleteSubKey ( )方法:<br>此方法是删除一个指定的子键,在使用此方法的时候,如果在此子键中还存在另外的子键,则会产生一个错误信息。在程序中调用此方法有二种原型,为:<br><ul><li>DeleteSubKey ( string , subkey ):这种调用方式就是直接删除指定的子键。</li><li>DeleteSubKey ( string subkey , Boolean info ):其中的"string"是要删除的子键的名称,"Boolean"参数的意思是:如果值为"True",则在程序调用的时候,删除的子键不存在,则产生一个错误信息;如果值为"False",则在程序调用的时候,删除的子键不存在,也不产生错误信息,程序依然正确运行。所以在具体的程序设计过程中,我还是推荐使用第二种调用方法。</li></ul><li>DeleteSubKeyTree ( )方法:<br>此方法是彻底删除指定的子键目录,即:删除该子键以及该子键以下的全部子键。由于此方法的破坏性是非常强的,所有在使用的时候要非常主要。在程序中调用此方法的原型就一种,为:<br>DeleteSubKeyTree ( string subkey ):其中"subkey"就是要彻底删除的子键名称。</li><li> DeleteValue ( )方法:<br>此方法是删除指定的键值。在程序中调用此方法的原型就一种,为:<br>DeleteValue ( string value ):其中"value"就是要删除的键值的名称。<br>在介绍完与删除注册表中注册信息有关方法后,将通过一个程序来说明他们在程序中具体用法。</li></ol></ccid_nobr><p ><ccid_nobr><b>二. 程序设计和运行环境以及要准备的工作:</b></ccid_nobr><p ><ccid_nobr><ol><li>视窗系统2000服务器版</li><li>.Net FrameWork SDK Beta 2版</li><li>由于程序的功能是删除指定的主键、子键和键值,这就需要我们在注册表中先为设置好这些值的位置和名称。具体如下:<br>在HKEY_LOCAL_MACHINE主键下面的"SOFTWARE"子键中建立如下子键和键值:<br>在"SOFTWARE"子键下建立"aaa"子键。在"aaa"子键下面建立"bbb"子键和"ddd"子键。在"bbb"子键中建立名称为"ccc"的键值,键值的值为"ccc"。子"ddd"子键中建立子键"eee",并在此子键中建立一个"fff"键值,键值的值为"fff"。程序中要删除的键值是"ccc"键值,要删除的子键是"bbb",要彻底删除的子键是"ddd"。具体设定如下图所示:<br><center><ccid_nobr><img  src="http://www.hh010.com/upload_files/article/244/9_yn2y1w10568.gif"><br>图01:为程序设定的注册表结构图</center></li></ol></ccid_nobr><p ><ccid_nobr><b>三. 程序设计的重要步骤:</b></ccid_nobr><p >程序设计的主要步骤就是如何删除键值、不包含任何子键的子键、包含子键的子键。下面就通过程序来具体说明:<p ><ccid_nobr><ol><li>如何删除键值。在程序中要删除键值是"ccc"。以下就是程序中删除此键值的具体语句。<br><table width="550" border="1" cellspacing="0" cellpadding="0" bordercolorlight="black" bordercolordark="#ffffff"><tr><td bgcolor="e6e6e6" class="code">RegistryKey hklm = Registry.LocalMachine ;RegistryKey software = hklm.OpenSubKey ( "SOFTWARE", true ) ;//打开"SOFTWARE"子键RegistryKey no1 = software.OpenSubKey ( "aaa", true ) ;//打开"aaa"子键RegistryKey no2 = no1.OpenSubKey ( "bbb" , true ) ;//打开"bbb"子键no2.DeleteValue( "ccc" ) ;//删除名称为"ccc"的键值</td></tr></table></li><li>如何删除不包含任何子键的子键。在程序要删除的子键是"bbb"。以下就是删除此子键的具体程序代码:<br><table width="550" border="1" cellspacing="0" cellpadding="0" bordercolorlight="black" bordercolordark="#ffffff"><tr><td bgcolor="e6e6e6" class="code">RegistryKey hklm = Registry.LocalMachine ;RegistryKey software = hklm.OpenSubKey ( "SOFTWARE", true ) ;//打开"SOFTWARE"子键RegistryKey no1 = software.OpenSubKey ( "aaa", true ) ;//打开"aaa"子键no1.DeleteSubKey ( "bbb", false );//删除名称为"bbb"的子键</td></tr></table></li><li>如何删除包含子键的子键。在程序中要删除的此子键是"ddd"。以下就是删除此子键的具体程序代码:<table width="550" border="1" cellspacing="0" cellpadding="0" bordercolorlight="black" bordercolordark="#ffffff"><tr><td bgcolor="e6e6e6" class="code">RegistryKey hklm = Registry.LocalMachine ;hklm.DeleteSubKey ( "aaa", false );RegistryKey software = hklm.OpenSubKey ( "SOFTWARE", true ) ;//打开"SOFTWARE"子键RegistryKey no1 = software.OpenSubKey ( "aaa", true ) ;//打开"aaa"子键no1.DeleteSubKeyTree ( "ddd" );//删除名称为"ddd"的子键</td></tr></table></li></ol></ccid_nobr><p ><ccid_nobr><b>四.本文中的程序源代码( reg.cs )以及运行界面:</b></ccid_nobr><p >reg.cs程序的主要功能就是删除注册表中的键值、不包含子键的子键和包含子键的子键。并且通过按钮"读取注册表",以列表的显示方法来及时了解删除的情况。下图就是程序运行后的界面:<p ><ccid_nobr><center><img  src="http://www.hh010.com/upload_files/article/244/9_yn2y1w10568.gif"><br>图02:本文中程序的运行界面</center></ccid_nobr><p >reg.cs程序源代码如下:<p ><ccid_nobr><table width=580 border=1 cellspacing=0 cellpadding=0 bordercolorlight = "black" bordercolordark = "#FFFFFF"><tr><td bgcolor=e6e6e6 class=code>using System ;<br>using System.Drawing ;<br>using System.Collections ;<br>using System.ComponentModel ;<br>using System.Windows.Forms ;<br>using System.Data ;<br>using Microsoft.Win32 ;<br>public class Form1 : Form<br>{<br>private System.ComponentModel.Container components ;<br>private ListBox listBox1 ;<br>private Button button1 ;<br>private Button button2 ;<br>private Button button3 ;<br>private Button button4 ;<br>public Form1 ( )<br>{<br>InitializeComponent ( ) ;<br>}<br>//清除在程序中使用过的资源<br>public override void Dispose ( )<br>{<br>base.Dispose ( ) ;<br>components.Dispose ( ) ;<br>}<br>//初始化程序中使用到的组件<br>private void InitializeComponent ( )<br>{<br>components = new System.ComponentModel.Container ( ) ;<br>button1 = new Button ( ) ;<br>button2 = new Button ( ) ;<br>button3 = new Button ( ) ;<br>button4 = new Button ( ) ;<br>listBox1 = new ListBox ( ) ;button1.Location = new System.Drawing.Point ( 16 , 320 ) ;<br>button1.Size = new System.Drawing.Size ( 75 , 23 ) ;<br>button1.TabIndex = 0 ;<br>button1.Text = "读取注册表" ;<br>button1.Click += new System.EventHandler ( button1_Click ) ;<br><br>button2.Location = new System.Drawing.Point ( 116 , 320 ) ;<br>button2.Size = new System.Drawing.Size ( 75 , 23 ) ;<br>button2.TabIndex = 0 ;<br>button2.Text = "删除键值ccc" ;<br>button2.Click += new System.EventHandler ( button2_Click ) ;<br><br>button3.Location = new System.Drawing.Point ( 216 , 320 ) ;<br>button3.Size = new System.Drawing.Size ( 75 , 23 ) ;<br>button3.TabIndex = 0 ;<br>button3.Text = "删除子键bbb" ;<br>button3.Click += new System.EventHandler ( button3_Click ) ;<br><br>button4.Location = new System.Drawing.Point ( 316 , 320 ) ;<br>button4.Size = new System.Drawing.Size ( 75 , 23 ) ;<br>button4.TabIndex = 0 ;<br>button4.Text = "删除主键ddd" ;<br>button4.Click += new System.EventHandler ( button4_Click ) ;<br><br>listBox1.Location = new System.Drawing.Point ( 16 , 32 ) ;<br>listBox1.Size = new System.Drawing.Size ( 496 , 264 ) ;<br>listBox1.TabIndex = 1 ;<br><br>this.Text = "用Visual C#来删除注册表中的主键、子键和键值!" ;<br>this.AutoScaleBaseSize = new System.Drawing.Size ( 5 , 13 ) ;<br>this.ClientSize = new System.Drawing.Size ( 528 , 357 ) ;<br>this.Controls.Add ( listBox1 ) ;<br>this.Controls.Add ( button1 ) ;<br>this.Controls.Add ( button2 ) ;<br>this.Controls.Add ( button3 ) ;<br>this.Controls.Add ( button4 ) ;<br>}<br>protected void button1_Click ( object sender , System.EventArgs e )<br>{<br>listBox1.Items.Clear ( ) ;<br>RegistryKey hklm = Registry.LocalMachine ;<br>RegistryKey software = hklm.OpenSubKey ( "SOFTWARE" ) ;<br>//打开"SOFTWARE"子键<br>RegistryKey no1 = software.OpenSubKey ( "aaa" ) ;<br>//打开"aaa"子键<br>foreach ( string site in no1.GetSubKeyNames ( ) )<br>//开始遍历由子键名称组成的字符串数组<br>{<br>listBox1.Items.Add ( site ) ;<br>//在列表中加入子键名称<br>RegistryKey sitekey = no1.OpenSubKey ( site ) ;<br>//打开此子键<br>foreach ( string sValName in sitekey.GetValueNames ( ) )<br>//开始遍历由指定子键拥有的键值名称组成的字符串数组<br>{<br>listBox1.Items.Add ( " " + sValName + ": " + sitekey.GetValue ( sValName ) ) ;<br>//在列表中加入键名称和对应的键值<br>}<br>}<br>}<br>protected void button2_Click ( object sender , System.EventArgs e )<br>{<br>RegistryKey hklm = Registry.LocalMachine ;<br>RegistryKey software = hklm.OpenSubKey ( "SOFTWARE", true ) ;<br>//打开"SOFTWARE"子键<br>RegistryKey no1 = software.OpenSubKey ( "aaa", true ) ;<br>//打开"aaa"子键<br>RegistryKey no2 = no1.OpenSubKey ( "bbb" , true ) ;<br>//打开"bbb"子键<br>no2.DeleteValue( "ccc" ) ;<br>//删除名称为"ccc"的键值<br>}<br>protected void button3_Click ( object sender , System.EventArgs e )<br>{<br>RegistryKey hklm = Registry.LocalMachine ;<br>RegistryKey software = hklm.OpenSubKey ( "SOFTWARE", true ) ;<br>//打开"SOFTWARE"子键<br>RegistryKey no1 = software.OpenSubKey ( "aaa", true ) ;<br>//打开"aaa"子键<br>no1.DeleteSubKey ( "bbb", false );<br>//删除名称为"bbb"的子键<br>}<br>protected void button4_Click ( object sender , System.EventArgs e )<br>{<br>RegistryKey hklm = Registry.LocalMachine ;<br>hklm.DeleteSubKey ( "aaa", false );<br>RegistryKey software = hklm.OpenSubKey ( "SOFTWARE", true ) ;<br>//打开"SOFTWARE"子键<br>RegistryKey no1 = software.OpenSubKey ( "aaa", true ) ;<br>//打开"aaa"子键<br>no1.DeleteSubKeyTree ( "ddd" );<br>//删除名称为"ddd"的子键<br>}<br>public static void Main ( )<br>{<br>Application.Run ( new Form1 ( ) ) ;<br>}<br>}<br></td></tr></table></ccid_nobr><p ><ccid_nobr><b>五.总结:</b></ccid_nobr><p >本文介绍Visual C#注册表编程的一个重要内容,即:如何删除注册信息。由于删除注册信息是一项非常具有破坏性的操作,所以在操作之前一定要注意对注册表的保护工作。<p >(责任编辑 <ccid_nobr>尤北</ccid_nobr>)                                 <p align="center"></p></p>
您需要登录后才可以回帖 登录 | 论坛注册

本版积分规则

QQ|Archiver|手机版|小黑屋|sitemap|鸿鹄论坛 ( 京ICP备14027439号 )  

GMT+8, 2025-4-10 17:00 , Processed in 0.107383 second(s), 22 queries , Redis On.  

  Powered by Discuz!

  © 2001-2025 HH010.COM

快速回复 返回顶部 返回列表