C#读写注册表代码

简介:

NET框架在Microsoft.Win32名字空间中提供了两个类来操作注册表:Registry和RegistryKey。这两个类都是密封类不允许被继承。下面我们分别来介绍这两个类。
        Registry类提供了7个公共的静态域,分别代表7个基本主键(其中两个在XP系统中没有)分别是:  
        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主键
        RegistryKey类中提供了对注册表操作的方法。要注意的是操作注册表必须符合系统权限,否则将会抛出错误。
      
       创建子键的方法原型为:
                            public RegistryKey CreateSubKey(string sunbkey);
               参数sunbkey表示要创建的子键的名称或路径名。创建成功返回被创建的子键,否则返回null。
        打开子键的方法原型为:
                            public RegistryKey OpenSubKey(string name);
                            public RegistryKey OpenSubKey(string name,bool writable);
                 参数name表示要打开的子键名或其路径名,参数writable表示被打开的子键是否允许被修改,第一个方法打开的子键是只读的。
         删除子键的方法原型为:
                            public void DeleteSubKey(string subkey);
                            该方法用于删除指定的主键。如果要删除的子键还包含主键则删除失败,并返回一个异常,如果要彻底删除该子键极其目录下的子键可以用方法DeleteSubKeyTree,该方法原型如下:
                            public void DeleteSunKeyTree(string subkey);
         读取键值的方法原型如下:
                            public object GetValue(string name);
                            public object GetValue(string name,object defaultValue);
                        参数name表示键的名称,返回类型是一个object类型,如果指定的键不存在则返回null。如果失败又不希望返回的值是null则可以指定参数defaultValue,指定了参数则在读取失败的情况下返回该参数指定的值。
          设置键值的方法原型如下:
                            public object SetValue(string name,object value);
          删除键值的方法原型如下:
                            public void DeleteValue(string name); 
本文来源于http://blog.csdn.net/greenerycn/archive/2007/03/06/1522616.aspx, 转载请保留,谢谢!

下面是本人自己写的测试小例,运行没有错误。
1. 写入
  try
             {
                RegistryKey rsg = null;
                if (Registry.LocalMachine.OpenSubKey("SOFTWARE\\RING").SubKeyCount <= 0)
                {
                    Registry.LocalMachine.DeleteSubKey("SOFTWARE\\RING");
                    Registry.LocalMachine.CreateSubKey("SOFTWARE\\RING");
                }

                rsg = Registry.LocalMachine.OpenSubKey("SOFTWARE\\RING",true);//true表示可以修改
                //if (rsg.GetValue("TestReg") == null)
                
//{
                
//    rsg.CreateSubKey("TestReg");
                
//}
                
//else
                
//{
                
//    rsg.DeleteSubKey("TestReg");               
                
//}
                rsg.SetValue("TestReg", System.DateTime.Now.ToString());
                rsg.Close();
            }

             catch (Exception ex)
             {
                this.label2.Text = ex.Message;
            }
2. 读取
  try
             {
                RegistryKey rsg = null;
                rsg = Registry.LocalMachine.OpenSubKey("SOFTWARE\\RING",true);
                if (rsg.GetValue("TestReg") != null) //读取失败返回null
                {
                    this.label2.Text = rsg.GetValue("TestReg").ToString();
                }

                else
                    this.label2.Text = "该键不存在!";
                rsg.Close();
            }

             catch (Exception ex)
             {
                this.label2.Text = ex.Message;
            }


本文转自Work Hard Work Smart博客园博客,原文链接:http://www.cnblogs.com/linlf03/archive/2011/07/19/2111125.html,如需转载请自行联系原作者
目录
相关文章
|
2月前
|
C# Windows
C#通过代码实现快捷键编辑
C#通过代码实现快捷键编辑
|
4月前
|
开发框架 .NET 编译器
C# 10.0中Lambda表达式的改进:更简洁、更灵活的代码编写体验
【1月更文挑战第21天】随着C#语言的不断发展,Lambda表达式作为一种简洁、高效的函数式编程工具,在C# 10.0中迎来了重要的改进。本文将详细探讨C# 10.0中Lambda表达式的新特性,包括参数类型的推断增强、自然类型的Lambda参数以及Lambda表达式的属性改进等。这些改进不仅简化了Lambda表达式的编写过程,还提升了代码的可读性和灵活性,为开发者带来了更优质的编程体验。
|
4月前
|
C# 开发者
C# 10.0中的文件范围命名空间:简化代码组织的新方式
【1月更文挑战第18天】C# 10.0引入了文件范围的命名空间,这是一种新的语法糖,用于更简洁地组织和管理代码。文件范围命名空间允许开发者在每个文件的基础上定义命名空间,而无需显式使用花括号包裹整个文件内容。本文将深入探讨文件范围命名空间的工作原理、使用场景以及它们为C#开发者带来的便利。
|
5月前
|
存储 人工智能 C#
【Unity 3D】C#中数组、集合、栈、队列、哈希表、字典的讲解(附测试代码)
【Unity 3D】C#中数组、集合、栈、队列、哈希表、字典的讲解(附测试代码)
37 0
|
5月前
|
IDE C# 开发工具
C# | 多线程批量下载文件(创建N个线程同时批量下载文件,只需要几行代码而已)
批量下载文件时使用多线程可以有效缩短完成时间,本文将讲解如何使用C#+CodePlus扩展库快速完成多线程的文件下载。 大部分代码由IDE自动生成,需要我们自己编写的代码正好**10行**。也就是说,只需要10分钟,就可以手撸一个多线程的批量下载器。
94 0
C# | 多线程批量下载文件(创建N个线程同时批量下载文件,只需要几行代码而已)
|
3月前
|
数据采集 JSON 前端开发
从代码到内容:使用C#和Fizzler探索Instagram的深处
Instagram是一个流行的社交媒体平台,拥有数亿的用户和海量的图片和视频内容。如果您想要从Instagram上获取一些有用的信息或数据,您可能需要使用爬虫技术来自动化地抓取和分析网页内容。本文将介绍如何使用C#和Fizzler这两个强大的工具,来实现一个简单而高效的Instagram爬虫,从代码到内容,探索Instagram的深处。
|
4月前
|
存储 传感器 监控
工业相机如何实现实时和本地Raw格式图像和Bitmap格式图像的保存和相互转换(C#代码,UI界面版)
工业相机如何实现实时和本地Raw格式图像和Bitmap格式图像的保存和相互转换(C#代码,UI界面版)
32 0
|
4月前
|
存储 C# 容器
掌握 C# 变量:在代码中声明、初始化和使用不同类型的综合指南
变量是用于存储数据值的容器。 在 C# 中,有不同类型的变量(用不同的关键字定义),例如: int - 存储整数(没有小数点的整数),如 123 或 -123 double - 存储浮点数,有小数点,如 19.99 或 -19.99 char - 存储单个字符,如 'a' 或 'B'。Char 值用单引号括起来 string - 存储文本,如 "Hello World"。String 值用双引号括起来 bool - 存储具有两个状态的值:true 或 false
39 2
|
5月前
|
设计模式 关系型数据库 程序员
UML中常用设计模式OCP、单例模式、简单工厂模式等模式讲解及C#中代码实现(附源码)
UML中常用设计模式OCP、单例模式、简单工厂模式等模式讲解及C#中代码实现(附源码)
44 0
|
5月前
|
自然语言处理 C# 图形学
【Unity 3D】C#中正则表达式的详解(附测试代码 超详细)
【Unity 3D】C#中正则表达式的详解(附测试代码 超详细)
51 0