CSDN首页 空间 新闻 论坛 Blog 下载 读书 网摘 搜索 .NET Java 视频 接项目 求职 在线学习 买书 程序员 通知
可用分押宝游戏火热进行中... 专题改版:Java Web 专题
CSDN社区
搜索 收藏 打印 关闭
CSDN社区 >  .NET技术 >  ASP.NET

如何在NET中读取和写入注册表

楼主xiaoyaofan()2006-05-04 09:32:23 在 .NET技术 / ASP.NET 提问

如何使用   Microsoft.Win32   命名空间读取和写入注册表?拜托大家了??急。。 问题点数:5、回复次数:1Top

1 楼webwalker(Jason.Xu@BenQ.com)回复于 2006-05-04 09:47:26 得分 0

在《如何读取注册信息》和《用Visual   C#来删除注册表中的注册信息》文章中,已经探讨了用Visual   C#来读取、删除注册表中的注册信息,在本篇文章中我们就来介绍Visual   C#注册表编程的另外二个重要的操作:创建注册信息和修改注册信息。    
  在上二篇文章中,我们已经知道,由于Visual   C#本身没有类库,他是通过.Net框架中的.Net   FrameWork   SDK(软件开发包)定义的一些类来实现对注册表的操作。这就是名称空间Microsoft.Win32中封装的二个类:Registry类、RegistryKey类。在RegistryKey类中定义了二个方法用来创建注册表中的主键、子键和键值。他们是CreateSubValue   (   )方法和SetValue   (   )方法。那么如何用Visual   C#来修改注册信息,在本文中,我们只是介绍了修改注册表中的键值的方法。而对于主键和子键,由于.Net   FrameWork   SDK中还没有定义这方面的方法,所以还无法完成安全的修改注册表中的信息。下面就先介绍如何用Visual   C#来创建注册信息。    
   
  一.Visual   C#创建和修改注册信息要调用的二个方法:    
  (1).CreateSubKey   (   String   key   )方法:此方法是创建以后面的字符串为名称的子键。当然这种方法不仅能够创建子键,在下面介绍的程序中,也通过此种方法来创建一个主键。    
   
  (2).SetValue   (   String   name   ,   String   keyvalue   )方法:此方法的作用有二点,一种可以用来重命名键值的数值,一种可以用来创建新的键值。具体情况如下:当打开的子键中,如果存在此键值,就把新值赋给他,实现重命名操作。如果不存在,则创建一个新的键值。    
   
  二.程序设计和运行环境以及要准备的工作:    
  I>视窗系统2000服务器版    
   
  II>.Net   FrameWork   SDK   Beta   2版    
   
  III>由于在程序中,要修改一个已经存在的键值,所以就要预先设置好键值所在的位置。打开注册表的编辑器,在"HKEY_LOCAL_MACHINE"主键下面的"HARDWARE"子键下面创建"aaa"子键并在此子键下面创建一个名称为"bbb"的键值。具体如下图所示:    
   
   
   
  图01:为程序设置的注册表的结构图示    
   
  三.程序的主要功能以及设计的重要步骤:    
  在下面介绍的程序中,主要的功能是用Visual   C#在注册表中创建一个主键、一个子键和修改一个指定的键值。其中要创建的子键的结构层次是在主键"HKEY_LOCAL_MACHIN"下面的"HAREWARE"主键下,名称为"ddd",其中包含一个键值,名称为"www",键值的值为"1234"。    
   
  其中的要创建的主键的结构层次也是在主键"HKEY_LOCAL_MACHIN"下面的"HAREWARE"主键下,名称为"main",在此主键下面包含一个名称为"sub"的子键和名称为"value"键值,键值的值为"1234"。下面就来着重介绍Visual   C#是如何创建和修改这些主键、子键和键值的。    
   
  (1).如何创建一个子键,在程序中是结合CreateSubKey   (   )方法和SetValue   (   )方法来实现的,以下是程序中创建子键的源程序:    
   
  listBox1.Items.Clear   (   )   ;  
  RegistryKey   hklm   =   Registry.LocalMachine   ;  
  RegistryKey   software   =   hklm.OpenSubKey   (   "HARDWARE"   ,   true   )   ;  
  RegistryKey   main1   =   software.CreateSubKey   (   "main"   )   ;  
  RegistryKey   ddd   =   main1.CreateSubKey   (   "sub"   )   ;  
  ddd.SetValue   (   "value"   ,   "1234"   );    
   
  (2).如何创建一个主键,创建一个主键和创建一个子键的过程大致是差不多的。由于主键包含若干子键,所以在创建主键的时候必须注意他们的层次关系。下面这一段程序,在参考的时候,请注意一下main键和sub键之间的关系。    
   
  listBox1.Items.Clear   (   )   ;  
  RegistryKey   hklm   =   Registry.LocalMachine   ;  
  RegistryKey   software   =   hklm.OpenSubKey   (   "HARDWARE",   true   )   ;  
  RegistryKey   main1   =   software.CreateSubKey   (   "main"   )   ;  
  RegistryKey   ddd   =   main1.CreateSubKey   (   "sub"   )   ;  
  ddd.SetValue   (   "value"   ,   "1234"   )   ;    
   
  (3).如何修改注册信息。由于注册表中的信息十分重要,所以一般不要对其进行写的操作。也可能是这个原因,在.Net   FrameWork   SDK   中并没有提供修改注册表键的方法。而只是提供了一个危害性相对较小的方法--SetValue   (   ),通过这个方法,我们可以来修改键值。下面程序代码是修改一个指定键值名称的键值。当然由于SetValue(   )方法的特性,如果它检测到这个键值不存在,就会创建一个新的键值。    
   
  listBox1.Items.Clear   (   )   ;  
  RegistryKey   hklm   =   Registry.LocalMachine   ;  
  RegistryKey   software   =   hklm.OpenSubKey   (   "HARDWARE",   true   )   ;  
  RegistryKey   dddw   =   software.OpenSubKey   (   "aaa"   ,   true   )   ;  
  dddw.SetValue   (   "bbb"   ,   "abcd"   )   ;    
   
  四.本文中源程序代码(   reg.cs   )以及编译后的程序运行界面:    
  以下是程序运行的界面:    
   
   
   
  图02:本文中介绍的程序运行界面    
   
  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   (   )   ;  
  }  
  //清除在程序中使用过的资源  
  public   override   void   Dispose   (   )  
  {  
  base.Dispose   (   )   ;  
  components.Dispose   (   )   ;  
  }  
  //初始化程序中使用到的组件  
  private   void   InitializeComponent   (   )  
  {  
  this.components   =   new   System.ComponentModel.Container   (   )   ;  
  this.button1   =   new   Button   (   )   ;  
  this.listBox1   =   new   ListBox   (   )   ;  
  button1.Location   =   new   System.Drawing.Point   (   16   ,   320   )   ;  
  button1.Size   =   new   System.Drawing.Size   (   90   ,   23   )   ;  
  button1.TabIndex   =   0   ;  
  button1.Text   =   "读取注册表"   ;  
  button1.Click   +=   new   System.EventHandler   (   this.button1_Click   )   ;  
   
  this.button2   =   new   Button   (   )   ;  
  button2.Location   =   new   System.Drawing.Point   (   116   ,   320   )   ;  
  button2.Size   =   new   System.Drawing.Size   (   90   ,   23   )   ;  
  button2.TabIndex   =   1   ;  
  button2.Text   =   "创建子键"   ;  
  button2.Click   +=   new   System.EventHandler   (   this.button2_Click   )   ;  
   
  this.button3   =   new   Button   (   )   ;  
  button3.Location   =   new   System.Drawing.Point   (   216   ,   320   )   ;  
  button3.Size   =   new   System.Drawing.Size   (   90   ,   23   )   ;  
  button3.TabIndex   =   2   ;  
  button3.Text   =   "创建主键"   ;  
  button3.Click   +=   new   System.EventHandler   (   this.button3_Click   )   ;  
   
  this.button4   =   new   Button   (   )   ;  
  button4.Location   =   new   System.Drawing.Point   (   316   ,   320   )   ;  
  button4.Size   =   new   System.Drawing.Size   (   90   ,   23   )   ;  
  button4.TabIndex   =   3   ;  
  button4.Text   =   "重命名键值"   ;  
  button4.Click   +=   new   System.EventHandler   (   this.button4_Click   )   ;  
   
  listBox1.Location   =   new   System.Drawing.Point   (   16   ,   32   )   ;  
  listBox1.Size   =   new   System.Drawing.Size   (   496   ,   264   )   ;  
  listBox1.TabIndex   =   4   ;  
  this.Text   =   "用Visual   C#来创建和修改注册表中的注册信息!"   ;  
  this.AutoScaleBaseSize   =   new   System.Drawing.Size   (   5   ,   13   )   ;  
  this.ClientSize   =   new   System.Drawing.Size   (   528   ,   357   )   ;  
  //在窗体中加入组件  
  this.Controls.Add   (   this.listBox1   )   ;  
  this.Controls.Add   (   this.button1   )   ;  
  this.Controls.Add   (   this.button2   )   ;  
  this.Controls.Add   (   this.button3   )   ;  
  this.Controls.Add   (   this.button4   )   ;  
  }  
  //以列表形式显示"HARDWARE"下面一层的子键和键值  
  protected   void   button1_Click   (   object   sender   ,   System.EventArgs   e   )  
  {  
  listBox1.Items.Clear   (   )   ;  
  RegistryKey   hklm   =   Registry.LocalMachine   ;  
  RegistryKey   software   =   hklm.OpenSubKey   (   "HARDWARE"   )   ;  
  //打开"SYSTEM"子键  
  foreach   (   string   site   in   software.GetSubKeyNames   (   )   )  
  //开始遍历由子键名称组成的字符串数组  
  {  
  listBox1.Items.Add   (   site   )   ;  
  //在列表中加入子键名称  
  RegistryKey   sitekey   =   software.OpenSubKey   (   site   )   ;  
  //打开此子键  
  foreach   (   string   sValName   in   sitekey.GetValueNames   (   )   )  
  //开始遍历由指定子键拥有的键值名称组成的字符串数组  
  {  
  listBox1.Items.Add   (   "   "   +   sValName   +   ":   "   +   sitekey.GetValue   (   sValName   )   )   ;  
  //在列表中加入键名称和对应的键值  
  }  
  }  
  }  
  //创建子键和键值  
  protected   void   button2_Click   (   object   sender   ,   System.EventArgs   e   )  
  {  
  listBox1.Items.Clear   (   )   ;  
  RegistryKey   hklm   =   Registry.LocalMachine   ;  
  RegistryKey   software   =   hklm.OpenSubKey   (   "HARDWARE",   true   )   ;  
  RegistryKey   ddd   =   software.CreateSubKey   (   "ddd"   )   ;  
  ddd.SetValue   (   "www"   ,   "1234"   );  
  }  
  //创建一个主键并创建一个键值  
  protected   void   button3_Click   (   object   sender   ,   System.EventArgs   e   )  
  {  
  listBox1.Items.Clear   (   )   ;  
  RegistryKey   hklm   =   Registry.LocalMachine   ;  
  RegistryKey   software   =   hklm.OpenSubKey   (   "HARDWARE",   true   )   ;  
  RegistryKey   main1   =   software.CreateSubKey   (   "main"   )   ;  
  RegistryKey   ddd   =   main1.CreateSubKey   (   "sub"   )   ;  
  ddd.SetValue   (   "value"   ,   "1234"   )   ;  
  }  
  //重命名一个存在的键值  
  protected   void   button4_Click   (   object   sender   ,   System.EventArgs   e   )  
  {  
  listBox1.Items.Clear   (   )   ;  
  RegistryKey   hklm   =   Registry.LocalMachine   ;  
  RegistryKey   software   =   hklm.OpenSubKey   (   "HARDWARE",   true   )   ;  
  RegistryKey   dddw   =   software.OpenSubKey   (   "aaa"   ,   true   )   ;  
  dddw.SetValue   (   "bbb"   ,   "abcd"   )   ;  
  }  
  public   static   void   Main   (   )  
  {  
  Application.Run   (   new   Form1   (   )   )   ;  
  }  
  }Top

相关问题

关键词

得分解答快速导航

  • 帖主:xiaoyaofan

相关链接

  • CSDN .NET频道
  • .NET类图书
  • C#类图书
  • .NET类源码下载

广告也精彩

反馈

请通过下述方式给我们反馈
反馈
提问
网站简介|广告服务|VIP资费标准|银行汇款帐号|网站地图|帮助|联系方式|诚聘英才|English|问题报告
世纪乐知(北京)网络技术有限公司 版权所有, 京 ICP 证 020026 号
北京创新乐知广告有限公司 提供技术支持
Copyright © 2000-2007, CSDN.NET, All Rights Reserved
GongshangLogo