C# 操作注册表实例(包括判断路径是否存在)

转载 2012年05月09日 14:25:12

在应用程序安装时, 常常需要利用注册表来登记应用程序的名称 、运行路径、 用户对应用程序的配置信息等 。许多应用程序在运行时也常常需要访问注册表。

.Net 框架结构在 Microsoft.Win32 名字空间内提供了两个类用于注册表操作:Registry 和RegistryKey 。这两个类都是密封类, 不允许被其它类继承。

Registry 类中提供了 7 个公有的静态域 ,分别代表 Windows 注册表中的 7 个基本主键 。它们是:
 

Registry.ClassesRoot  对应于 HKEY_CLASSES_ROOT 主键。
Registry.CurrentUser  对应于 HKEY_CURRENT_USER 主键。
Registry.LocalMachine  对应于 HKEY_ LOCAL_MACHINE 主键。
Registry.Users  对应于 HKEY_USERS 主键。
Registry.CurrentConfig  对应于 HKEY_CURRENT_CONFIG 主键
Registry.DynDta  对应于 HKEY_DYN_DATA 主键
Registry.PerformanceData  对应于 HKEY_ PERFORMANCE_DATA 主键

RegistryKey类中封装了对 Windows 注册表的基本操作。 对注册表的操作必须符合系统提供的权限 ,否则不能完成指定的操作, 程序将抛出一个异常。


创建子键
创建子键的成员方法的原型为:
 

C#代码
public RegistryKey CreateSubKey(string subkey);  

其中 ,参数 subkey 表示要创建的子键的名字或子键的全路径名 。如果创建成功,返回值就是被创建的子键 ,否则为null。

打开子键
打开子键的成员方法原型为:
 

C#代码
public RegistryKey OpenSubKey(string name);   
public RegistryKey OpenSubKey(string name, bool writable);  

name 参数表示要打开的子键名称或全路径名 ,writable 参数表示被打开的主键是否可以被修改。第一个方法对打开的子键默认是只读的, 如果希望对打开的主键进行写操作 ,使用第二个方法 并把writable参数值设为true。命名空间 Microsoft.Win32 中还为我们提供了另一个方法 ,用于打开远程机器上的注册表进行操作 。方法原型为:
 

C++代码
public static RegistryKey OpenRemoteBaseKey( RegistryHive hKey, string machineName);  


删除子键

DeleteSubKey方法用于删除指定的子键 ,方法原型为:
 

C#代码
public void DeleteSubKey (string subkey);  


使用 DeleteSubKey 方法时,如果子键之中还包含子键 ,则删除失败 ,并返回一个异常。 如果要彻底删除子键目录,即删除子键以及子键以下的全部子键,可以使用DeleteSubKeyTree方法 。该方法原型为:
 

C#代码
public void DeleteSubKeyTree(string subkey);  


读取键值

读键的方法原型为:
 

C#代码
public object GetValue(string name);   
public object GetValue(string name, object defaultValue);  

name 参数表示键的名称, 返回类型是一个 object 类型。 如果方法中指定的键不存在 ,则方法返回一个 null。 我们在使用 GetValue 方法时, 可以不必关心该键的值类型究竟是字符串 、二进制还是DWORD类型, 只要使用正确的返回类型就可以了。 比如,我们希望读取一个字符串类型的键值, 代码就可以这样写:
 

C#代码
string s_value = key.GetValue(“Type”);  


其中key表示一个主键。如果不确定键值是否存在 ,而又不希望得到一个 null 返回值, 那就使用第二个方法GetValue(string name, object defaultValue), 其中的参数defaultValue表示默认的返回值 。如果读取失败, 返回值就是传递给参数defaultValue的值。


设置键值
设置键值的方法原型为:
 

C#代码
public void SetValue(string name, object value);  


同样 ,我们在使用该方法修改键值时,不用费心去分辨究竟该传递哪种值类型,方法将会识别是哪种类型, 并把相应类型的值赋予指定的键。

1.读取指定名称的注册表的值

C#代码
private string GetRegistData(string name)   
  
{   
  
   string registData;   
  
   RegistryKey hkml = Registry.LocalMachine;   
  
   RegistryKey software = hkml.OpenSubKey("SOFTWARE",true);   
  
   RegistryKey aimdir = software.OpenSubKey("XXX",true);   
  
   registData = aimdir.GetValue(name).ToString();   
  
   return registData;   
  
}   

 

以上是读取的注册表中HKEY_LOCAL_MACHINE\SOFTWARE目录下的XXX目录中名称为name的注册表值;

2.向注册表中写数据

C#代码
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.删除注册表中指定的注册表项

C#代码
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.判断指定注册表项是否存在

 

C#代码
private bool IsRegeditExit(string name)   
  
        {   
  
            bool _exit = false;   
  
            try  
  
            {   
  
                string[] subkeyNames;   
  
                RegistryKey hkml = Registry.LocalMachine;   
  
                RegistryKey software = hkml.OpenSubKey("SOFTWARE", true);        
                RegistryKey aimdir = software.OpenSubKey("Weather", true);               /////由此可判断Weather路径是否存在

   
                subkeyNames = aimdir.GetValueNames();   
  
                foreach (string keyName in subkeyNames)   
  
                {   
  
                    if (keyName == name)   
  
                    {   
  
                        _exit = true;   
  
                        return _exit;   
  
                    }   
  
                }   
  
            }   
  
            catch  
  
            { }   
  
            return _exit;   
  
        }   

以上是在注册表中HKEY_LOCAL_MACHINE\SOFTWARE目录下XXX目录中判断名称为name注册表项是否存在,这一方法在删除注册表时已经存在,在新建一注册表项时也应有相应判断;

一个例子:

C#代码
using Microsoft.Win32;   
  
    using System.Diagnostics;   
  
    private void Access_Registry()   
  
    {   
  
         // 在HKEY_LOCAL_MACHINE\Software下建立一新键,起名为MCBInc   
  
            RegistryKey key = Registry.LocalMachine.OpenSubKey("Software", true);   
  
         // 增加一个子键   
  
            RegistryKey newkey = key.CreateSubKey("MCBInc");   
  
     
  
 // 设置此子键的值   
  
            newkey.SetValue("MCBInc", "NET Developer");   
  
           
  
// 从注册表的其他地方获取数据   
  
           
  
// 找出你的CPU   
  
            RegistryKey pRegKey = Registry.LocalMachine;   
  
            pRegKey = pRegKey.OpenSubKey("HARDWARE\\DESCRIPTION\\System\\CentralProcessor\\0");   
  
            Object val = pRegKey.GetValue("VendorIdentifier");   
  
            Debug.WriteLine("The central processor of this machine is:"+ val);   
  
         // 删除键值   
  
            RegistryKey delKey = Registry.LocalMachine.OpenSubKey("Software", true);   
  
            delKey.DeleteSubKey("MCBInc");   
  
    }   

 以上内容转摘自(CNode.CN)详细出处请参考:http://www.cnode.cn/article.asp?id=308

相关文章推荐

C#.NET对注册表的常用操作(增加项,判断指定项是否存在,增加键(键的名称,键的数值),判断指定的键是否存在)

建立一个对注册表的常用操作的工具类。在HKEY_LOCAL_MACHINE/SOFTWARE下,增加项,判断指定项是否存在,增加键(键的名称,键的数值),判断指定的键是否存在using System;...

C#操作注册表~Regedit

转自:http://blog.csdn.net/zhangj1012003_2007/archive/2009/10/22/4712994.aspx 参考:http://zhidao.baidu.co...

c# 注册表操作,创建,删除,修改,判断节点是否存在

关键字: c# 注册表 操作 创建 删除 修改 判断 节点 存在用.NET下托管语言C#操作注册表,主要内容包括:注册表项的创建,打开与删除、键值的创建(设置值、修改),读取和 删除、判断注册表项...

c# .net 操作注册表较全实例

  • 2013年07月24日 21:11
  • 22KB
  • 下载

C#(WPF)程序将Debug中的.exe文件放入注册表中启动,获取错误的当前路径--解决方案

编写的程序需要开机运行,又不想进入win7的桌面。这样可以通过修改注册表,把原来的explorer.exe换成需要启动的软件。 注意,比如.exe文件存在于D盘的Debug文件夹中,则用 D:\\D...

利用C#访问注册表获取软件的安装路径

本博文使用C#访问注册表获取软件的安装路径并进行显示。
  • tiana0
  • tiana0
  • 2013年12月15日 10:51
  • 6143

C语言注册表操作实例

C语言注册表操作实例 例子1: #include #include int main(void) { char regname[]="Software\\Microsoft\\Wind...

C#操作注册表,设置系统环境变量

@bluesky 2014-07-28 22:35 字数 3398 阅读 1 C#操作注册表,设置系统环境变量 注册表 起因 最近重装系统,NX9.0太大了,不想...

C# 注册表操作 概述

注册表概述首先介绍下Windows操作系统中的注册表是什么?有什么作用?。很早以前的注册表咱就不管了,只说说目前主流的几个Windows操作系统中的注册表。按照我个人的理解,注册表在操作系统中的角色是...

C#学习笔记21——文件、目录、注册表操作

一, 管理文件系统文件系统包括Filedirectory Path FileInfo DirectoryInfo DriveInfo类,这些类的对应关系图:1,File directory 是静态类,...
  • byxdaz
  • byxdaz
  • 2011年09月03日 11:32
  • 1590
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:C# 操作注册表实例(包括判断路径是否存在)
举报原因:
原因补充:

(最多只允许输入30个字)