zoukankan      html  css  js  c++  java
  • C#操作注册表

    1.注册表项

    直白的理解就是注册表的文件夹项目。对它的操作无非就是增删改查,下面分别进行说明。

    (1)查询

    /// <summary>
            /// 判断注册表项是否存在
            /// </summary>
            /// <param name="OpenSubKeyName">注册表项路径</param>
            /// <param name="itemName">项目名称</param>
            /// <returns>存在true,不存在false</returns>
            private bool IsRegeditItemExist(string openSubKeyName, string itemName, EnumRegistryType type)
            {
                string[] SubKeyNames;
    
                RegistryKey Key = this.GetRegistryType(type);
    
                try
                {
                    if (string.IsNullOrEmpty(openSubKeyName))
                    {
                        throw new Exception("openSubKeyName is null");
                    }
                    if (string.IsNullOrEmpty(itemName))
                    {
                        throw new Exception("itemName is null");
                    }
    
                    RegistryKey Software = Key.OpenSubKey(openSubKeyName);
                    if (Software == null)
                    {
                        return false;
                    }
    
                    SubKeyNames = Software.GetSubKeyNames();
    
                    foreach (string keyName in SubKeyNames)
                    {
                        if (keyName == itemName)
                        {
                            Key.Close();
                            return true;
                        }
                    }
    
                    Key.Close();
                    return false;
                }
                catch (Exception ex)
                {
                    Key.Close();
                    throw new Exception(ex.Message.ToString());
                    return false;
                }
            }
    View Code

    (2)增加

    public void CreateRegeditItem(string openSubKeyName, string itemName, EnumRegistryType type)
            {
                //存在,返回
                if (IsRegeditItemExist(openSubKeyName, itemName, type))
                {
                    return;
                }
    
                //不存在,则进行增加操作
                RegistryKey Key = Registry.LocalMachine;
                RegistryKey Software = Key.CreateSubKey(openSubKeyName + "\" + itemName);
    
                Key.Close();
                return;
            }
    View Code

    (3)删除

    public void DeleteRegeditItem(string openSubKeyName, string itemName, EnumRegistryType type)
            {
                //不存在,返回
                if (!IsRegeditItemExist(openSubKeyName, itemName, type))
                {
                    return;
                }
    
                //存在,则进行删除操作
                RegistryKey Key = this.GetRegistryType(type);
    
                Key.DeleteSubKey(openSubKeyName + "\" + itemName);
    
                Key.Close();
                return;
            }
    View Code

    2.注册表键值

    直白的理解就是注册表项里面的各个属性值。对它的操作无非就是增删改查,下面分别进行说明。

    (1)查询是否存在

    /// <summary>
            /// 判断注册表键值是否存在
            /// </summary>
            /// <param name="openSubKeyName"></param>
            /// <param name="keyName"></param>
            /// <returns></returns>
            private bool IsRegeditKeyExist(string openSubKeyName, string keyName, EnumRegistryType type)
            {
                string[] SubKeyNames;
    
                RegistryKey Key = this.GetRegistryType(type);
    
                RegistryKey Software = Key.OpenSubKey(openSubKeyName);
                if (Software == null)
                {
                    return false;
                }
    
                SubKeyNames = Software.GetValueNames();
    
                foreach (string name in SubKeyNames)
                {
                    if (name == keyName)
                    {
                        Key.Close();
                        return true;
                    }
                }
    
                Key.Close();
                return false;
            }
    View Code

    (2)查询值

    public string ReadRegeditKey(string openSubKeyName, string keyName, EnumRegistryType type)
            {
                if (!IsRegeditKeyExist(openSubKeyName, keyName, type))
                {
                    return string.Empty;
                }
    
                RegistryKey Key = this.GetRegistryType(type);
    
                RegistryKey myKey = Key.OpenSubKey(openSubKeyName);
                if (myKey == null)
                {
                    return string.Empty;
                }
    
                string KeyInfo = myKey.GetValue(keyName).ToString();
    
                Key.Close();
                return KeyInfo;
            }
    View Code

    (3)修改或增加值

    public void EditRegieditKey(string openSubKeyName, string keyName, object keyValue, EnumRegistryType type)
            {
                if (IsRegeditKeyExist(openSubKeyName, keyName, type))
                {
                    return;
                }
    
                RegistryKey Key = this.GetRegistryType(type);
    
                RegistryKey Software = Key.OpenSubKey(openSubKeyName, true);
                if (Software == null)
                {
                    return;
                }
    
                Software.SetValue(keyName, keyValue);
    
                Key.Close();
                return;
            }
    View Code

    (4)删除值

    public void DeleteRegieditKey(string openSubKeyName, string keyName, EnumRegistryType type)
            {
                if (IsRegeditKeyExist(openSubKeyName, keyName, type))
                {
                    return;
                }
    
                RegistryKey Key = this.GetRegistryType(type);
    
                RegistryKey Software = Key.OpenSubKey(openSubKeyName, true);
                if (Software == null)
                {
                    return;
                }
    
                Software.DeleteValue(keyName);
    
                Key.Close();
                return;
            }
    View Code

    3.辅助方法

    (1)引用

    添加下面一行引用即可调用操作注册表的各个类。

    using Microsoft.Win32;

    (2)公用方法

    只写了一部分,没有写全,仅供参考。

    /// <summary>
            /// 
            /// </summary>
            /// <param name="type">注册表类型</param>
            /// <returns></returns>
            private RegistryKey GetRegistryType(EnumRegistryType type)
            {
                RegistryKey Key;
    
                switch (type)
                {
                    case EnumRegistryType.HKEY_CURRENT_USER:
                        Key = Registry.CurrentUser;
                        break;
                    case EnumRegistryType.HKEY_LOCAL_MACHINE:
                        Key = Registry.LocalMachine;
                        break;
                    case EnumRegistryType.HKEY_USER:
                        Key = Registry.Users;
                        break;
                    default:
                        Key = Registry.LocalMachine;
                        break;
                }
    
                return Key;
            }
    View Code

    (3)枚举类

    只写了一部分,没有写全,仅供参考。

    public enum EnumRegistryType
        {
            /// <summary>
            /// 当前用户
            /// </summary>
            HKEY_CURRENT_USER,
    
            /// <summary>
            /// 本地主机
            /// </summary>
            HKEY_LOCAL_MACHINE,
    
            /// <summary>
            /// 用户
            /// </summary>
            HKEY_USER
        }
    View Code

    (4)32位和64位区别

    上面默认全部以32位系统为基础,如果是64位系统,则注册表会写入到子项“Wow6432Node”下面。

    其中判断是否为64为系统的方法如下:

         /// <summary>
            /// 系统是否64位
            /// </summary>
            /// <returns></returns>
            private bool Is64Bit()
            {
                return System.IntPtr.Size == 8;
            }
  • 相关阅读:
    linux定时执行任务crontab命令用法
    windows下安装python和依赖包的利器——Anaconda
    Python学习笔记1——Python基础
    Mysql创建新用户后无法登录,提示 Access denied for user 'username'@'localhost' (using password: YES)
    Hadoop伪分布搭建
    Hadoop2.20集群搭建
    对于C++中const & T operator= 的一点思考
    搬家啦~
    利用raspberry pi搭建typecho笔记(三) typecho nginx sqlite FAQ
    利用raspberry pi搭建typecho笔记(二) sqlite和typecho部署
  • 原文地址:https://www.cnblogs.com/wangyblzu/p/5842362.html
Copyright © 2011-2022 走看看