C#操作注册表

一.注册表巢

     在注册表中,最上面的节点是注册表巢(registry hive)。

     HKEY_CLASSES_ROOT(HKCR)    包含系统文件类型的细节,以及应用程序可以打开的文件类型,它还包含所有COM组件的注册信息。

     HKEY_CURRENT_USER(HKCU)    包含用户目前登陆的机器的用户配置,包括桌面设置、环境变量、网络和打印机连接和其他定义用户操作环境的变量。

     HKEY_LOCAL_MACHINE(HKLM)    是一个很大的巢,其中包含所有安装到机器上的软件和硬件的信息。

     HKEY_USERS(HKUSR)                包含所有用户的用户配置。

     HKEY_CURRENT_CONFIG(HKCF)  包含机器上硬件的信息。

二.注册表类及常用属性和函数

using Microsoft.Win32;
这个命名空间包含了注册表相关的类。Registry类、RegistryKey类。
Registry类封装了注册表的七个基本主键:
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类封装了对注册表的基本操作。包括读、写、删等操作的常用函数: 
Name键的名称(只读)
SubKeyCount键的子键个数
ValueCount键包含的值的个数
Close()关闭键
CreateSubKey()创建给定名称的子键
DeleteSubKey()删除指定的子键
DeleteSubKeyTree()递归删除子键及其所有的子键
DeleteValue()从键中删除一个指定的值
GetAccessControl()返回指定注册表键的访问控制表
GetSubKeyNames()返回包含子键名称的字符串数组
GetValue()返回指定的值
GetValueKind()返回指定的值,检索其注册表数据类型
GetValueNames()返回一个包含所有键值名称的字符串数组
OpenSubKey()返回表示给定子键的RegistryKey实例引用
SetAccessControl()把访问控制表(ACL)应用于指定的注册表键
SetValue()设置指定的值

            






















三 注册表项的创建、打开、删除
1,创建
 //使用CreateSubKey()在SOFTWARE下创建子项test
RegistryKey hklm = Registry.LocalMachine;
RegistryKey hkSoftWare = hklm.CreateSubKey(@"SOFTWARE\test");
hklm.Close();
hkSoftWare.Close();
 

       2,打开

//使用OpenSubKey()打开项,获得RegistryKey对象,当路径不存在时,为Null。第二个参数为true,表示可写,可读,可删;省略时只能读。
RegistryKey hklm = Registry.LocalMachine;
RegistryKey hkSoftWare = hklm.OpenSubKey(@"SOFTWARE\test",true);
hklm.Close();
hkSoftWare.Close();

 

 

 

      3,删除

//主要用到了DeleteSubKey(),删除test项
RegistryKey hklm = Registry.LocalMachine;
hklm.DeleteSubKey(@"SOFTWARE\test", true);  //为true时,删除的注册表不存在时抛出异常;当为false时不抛出异常。
hklm.Close();

 

四、注册表键值的创建、打开和删除

      1,创建

//主要用到了SetValue(),表示在test下创建名称为Name,值为RegistryTest的键值。第三个参数表示键值类型,省略时,默认为字符串
RegistryKey hklm = Registry.LocalMachine;
RegistryKey hkSoftWare = hklm.OpenSubKey(@"SOFTWARE\test",true);
hkSoftWare.SetValue("Name", "RegistryTest", RegistryValueKind.String);
hklm.Close();
hkSoftWare.Close();

 

     2,打开

//主要用到了GetValue(),获得名称为"Name"的键值
RegistryKey hklm = Registry.LocalMachine;
RegistryKey hkSoftWare = hklm.OpenSubKey(@"SOFTWARE\test", true);
string sValue = hkSoftWare.GetValue("Name").ToString();
hklm.Close();
hkSoftWare.Close();

 

     3,删除

//主要用到了DeleteValue(),表示删除名称为"Name"的键值,第二个参数表示是否抛出异常
RegistryKey hklm = Registry.LocalMachine;
RegistryKey hkSoftWare = hklm.OpenSubKey(@"SOFTWARE\test", true);
hkSoftWare.DeleteValue("Name", true);
hklm.Close();
hkSoftWare.Close();

 

五、判断注册表项、注册表键值是否存在

        //判断注册表项是否存在
        private bool IsRegistryKeyExist(string sKeyName)
        {
            string[] sKeyNameColl;
            RegistryKey hklm = Registry.LocalMachine;
            RegistryKey hkSoftWare = hklm.OpenSubKey(@"SOFTWARE");
            sKeyNameColl = hkSoftWare.GetSubKeyNames(); //获取SOFTWARE下所有的子项
            foreach (string sName in sKeyNameColl)
            {
                if (sName == sKeyName)
                {
                    hklm.Close();
                    hkSoftWare.Close();
                    return true;
                }
            }
            hklm.Close();
            hkSoftWare.Close();
            return false;
        }


        //判断键值是否存在
        private bool IsRegistryValueNameExist(string sValueName)
        {
            string[] sValueNameColl;
            RegistryKey hklm = Registry.LocalMachine;
            RegistryKey hkTest = hklm.OpenSubKey(@"SOFTWARE\test");
            sValueNameColl = hkTest.GetValueNames(); //获取test下所有键值的名称
            foreach (string sName in sValueNameColl)
            {
                if (sName == sValueName)
                {
                    hklm.Close();
                    hkTest.Close();
                    return true;
                }
            }
            hklm.Close();
            hkTest.Close();
            return false;
        }

 

六、程序自启动程序

                //开启程序自启动
                string path = Application.ExecutablePath;
                RegistryKey rk = Registry.LocalMachine;
                RegistryKey rk2 = rk.CreateSubKey(@"Software\Microsoft\Windows\CurrentVersion\Run");
                rk2.SetValue("JcShutdown", path);
                rk2.Close();
                rk.Close();



                //关闭程序自启动
                string path = Application.ExecutablePath;
                RegistryKey rk = Registry.LocalMachine;
                RegistryKey rk2 = rk.CreateSubKey(@"Software\Microsoft\Windows\CurrentVersion\Run");
                rk2.DeleteValue("JcShutdown", false);
                rk2.Close();
                rk.Close();

 

转载于:https://www.cnblogs.com/boby-/p/4724255.html

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值