C#中对注册表的操作

转载 2007年09月27日 22:30:00

Windows 操作系统的注册表包含了很多有关计算机运行的配置方式,打开注册表我们可以看到注册表是按类似于目录的树结构组织的,其中第二级目录包含了五个预定义主键分别是:HKEY_CLASSES_ROOT,HKEY_CURRENT_USER,HKEY_LOCAL_MACHINE,HKEY_USERS,HKEY_CURRENT_CONFIG。
        下面我们来分别解释这5个类的作用
        HKEY_CLASSES_ROOT该主键包含了文件的扩展名和应用程序的关联信息以及Window Shell和OLE用于储存注册表的信息。该主键下的子键决定了在WINDOWS中如何显示该类文件以及他们的图标,该主键是从HKEY_LCCAL_MACHINE/SOFTWARE/Classes映射过来的。
        HKEY_CURRENT_USER该主键包含了如用户窗口信息,桌面设置等当前用户的信息。
        HKEY_LOCAL_MACHINE主键包含了计算机软件和硬件的安装和配置信息,该信息可供所有用户使用
        HKEY_USERS该主键记录了当前用户的设置信息,每次用户登入系统时,就会在该主键下生成一个与用户登入名一样的子键,该子键保存了当前用户的桌面设置、背景位图、快捷键,字体等信息。一般应用程序不直接访问改主键,而是通过主键HKEY_CURRENT_USER进行访问。
        HKEY_CURRENT_CONFIG该主键保存了计算机当前硬件的配置信息,这些配置可以根据当前所连接的网络类型或硬件驱动软件安装的改变而改变。
        C#也支持对注册表的编辑,.NET框架在Microsoft.Win32名字空间中提供了两个类来操作注册表:Registry和RegistryKey。这两个类都是密封类不允许被继承。下面我们分别来介绍这两个类。
        Registry类提供了7个公共的静态域,分别代表7个基本主键(其中两个在XP系统中没有,在这就不介绍了)分别是:Registry.ClassesRoot,Registry.CurrentUser,Registry.LocalMachine,Registry.Users,Registry.CurrentConfig。它们分别对应哪几个键我想各位一看就会知道吧。
        RegistryKey类中提供了对注册表操作的方法。要注意的是操作注册表必须符合系统权限,否则将会抛出错误。
            下面我们就来几个操作注册表常用的几个方法
                    创建子键的方法原型为:
                            public RegistryKey CreateSubKey(string sunbkey);
                         参数sunbkey表示要创建的子键的名称或路径名。创建成功返回被创建的子键,否则返回null。
                    打开子键的方法原型为:
                            public RegistryKey OpenSubKey(string name);
                            public RegistryKey OpenSubKey(string name,bool writable);
                               参数name表示要打开的子键名或其路径名,参数writable表示被打开的子键是否允许被修改,第一个方法打开的子键是只读的。Microsoft.Win32类还为我们提供了另一个方法,用于打开远程计算机上的注册表,方法原型为:
                            public static RegistryKey OpenRemoteBaseKey(RegistryHive hKey,string machineName);
                    删除子键的方法原型为:
                            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);
哇吃饭的时间到了等下再来继续写示例。
            昨天由于吃好饭帮朋友找论文找到很玩就来步及接下去写了,今天就来完成示例部分。
            这个示例很简单就是隐藏开始菜单下的运行选项,实现方法也很简单只要稍微修改下注册表也可以实现,这里我们用程序来实现,我们通过在HKEY_CURRENT_USER//Software//Microsoft//Window//CurrentVersion//Policies//Explorer主键下新建一个DWORD键值NoRun设置其值为1就可以了,上面我们说过Windows的桌面设置大多放在HKEY_CURRENT_USER主键中。下面我们就来写示例的实现代码:
                        using System;
                        using Microsoft.Win32;
                        class Test
                        {
                            public static void Main()
                                {
                                        RegistryKey key=Registry.CurrentUser;
                                        RegistryKey Tkey=key.CreateSubKey(“Software//Microsoft//Windows//CurrentVersion//Policies//Explorer”);
                                        Tkey.SetValue(”NoRun”,1);
                                        Tkey.Close();
                                }
                        }
呵呵,代码就这么点,呵呵!!
                        如果你想屏蔽关闭系统,查找功能,注销和文档选项也可以至于怎么屏蔽就自己慢慢摸索吧,先告诉你和屏蔽运行菜单是一样的就建的键值不同。好了就到这里了,结束!!!

转帖者再加一个例子,不过内容都差不多:

try
{
     //关于OpenSubKey的用法请见http://msdn2.microsoft.com/zh-cn/library/microsoft.win32.registrykey.opensubkey(vs.80).aspx
     RegistryKey rk = Registry.CurrentUser.OpenSubKey("Software").OpenSubKey("yolon",true); //打开在HKEY_CURRENT_USER下面的Software下面的项“yolon”
     if (rk == null)//如果找不到该项
     {
          //创建一个新的项,OpenSubKey里第二个参数true,代表可写方式打开项
            rk = Registry.CurrentUser.OpenSubKey("Software",true).CreateSubKey("yolon");
     }
     if (rk == null)//如果还找不到项
     {
          MessageBox.Show("未能创建注册表信息,请以系统管理员权限运行本监控程序");//弹出提示
          Application.Exit();//程序退出
     }
     string val= Convert.ToString(rk.GetValue("项目"));//读取rk项里“项目”的值
      if (val == "")
     {
          //关于SetValue的用法请见http://msdn2.microsoft.com/zh-cn/library/microsoft.win32.registry.setvalue.aspx
          rk.SetValue("项目", @"值",RegistryValueKind.String);
     }
}
catch (Exception err)
{
      MessageBox.Show("未知注册表错误,详细:/n/r"+err.ToString());//弹出提示
      Application.Exit();//程序退出
}

 

C#读取注册表的权限问题

C#读取注册表非常简单方便,指定路径后,设置对应的字段和属性值即可。 但是从Windows Vista开始,读取注册表就开始需要权限了。当然可以简单的使用管理员权限打开,或者在程序的安全性中设置...
  • zjlovety
  • zjlovety
  • 2014年08月20日 15:48
  • 979

C# 注册表操作类(完整版)

C# 注册表操作类
  • lj22377
  • lj22377
  • 2014年07月31日 17:12
  • 602

利用C#开发web应用程序时,对注册表进行操作提示没有权限的解决办法

因为公司项目需要对web程序添加一套注册机制。本人菜鸟一个,也就能想到利用...
  • akakakak747
  • akakakak747
  • 2016年01月13日 22:48
  • 845

win7下c#程序修改注册表的权限问题

最近在做一个cs的项目,项目已经完成,后来发现不兼容windows7,经过一番整改,终于大功落成。现将心得体会写在这里。 首先读取注册表要给用户管理员得权限。exe在Vista或Win7下不以管理员...
  • findsafety
  • findsafety
  • 2015年05月26日 15:35
  • 2247

C#设置注册表权限失败,修改应用程序以管理员身份执行

最近写了一个控制台程序,将程序的相关信息注册到注册表中。但是运行的时候提示写注册表被拒。电脑的当前用户没有管理员的权限。 如何给控制台程序赋管理员的权限呢? 给程序添加 .manifest ...
  • qq_18229381
  • qq_18229381
  • 2016年12月16日 16:00
  • 1104

C#之操作注册表(RegistryKey类)

Ø C#注册表的操作包括: A、注册表项的创建,打开与删除。 B、注册表键值的创建(设置值,修改),读取和删除。 C、判断注册表项或者值是否存在。 Ø C#的命名空间 using Microsoft....
  • qq_23833037
  • qq_23833037
  • 2017年08月12日 00:21
  • 597

C#注册表操作汇总

一、注册表基本知识 1)       结构      键->项->子项->值项(名称、类型、数据)     REG_SZ         字符串     REG_BINARY    二进制 ...
  • z702143700
  • z702143700
  • 2015年07月06日 09:38
  • 1005

C# 操作注册表

原文地址:http://379910987.blog.163.com/blog/static/33523797201011465218983/
  • yal179
  • yal179
  • 2014年10月23日 19:24
  • 1265

C#注册表读写完整操作类

1.注册表基项静态域 C#代码   ///        /// 注册表基项静态域       ///1.Registry.ClassesRoot 对应于HKEY_CLAS...
  • lingfengstar1
  • lingfengstar1
  • 2017年06月01日 18:57
  • 593

【VS调试】C#读写Windows 7注册表时抛出“不允许所请求的注册表访问权”的解决办法

在XP/2003下调试得好好的程序,到了windows7下,却抛出“不允许所请求的注册表访问权”的异常,该异常就在读写注册表时引发,例:public class Program { ...
  • wonsoft
  • wonsoft
  • 2011年07月11日 18:49
  • 14078
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:C#中对注册表的操作
举报原因:
原因补充:

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