Example #1
0
 /// <summary>
 /// 打开注册表项节点,以只读的方式检查子项
 /// </summary>
 /// <param name="baseKey">基项域</param>
 /// <param name="subKeyName">注册表项名称</param>
 /// <param name="writable">true:只读访问,false:写访问</param>
 /// <returns></returns>
 private static RegistryKey OpenSubKey(RegistryBaseKey baseKey, string subKeyName, bool writable = true)
 {
     RegistryKey topKey = GetTopKey(baseKey);
     RegistryKey subKey = topKey.OpenSubKey(subKeyName, writable);
     topKey.Close();
     return subKey;
 }
Example #2
0
        public async Task WriteValueAsync(RegistryBaseKey baseKey, string key, string valueName, string value)
        {
            var command = new RegistryWriteStringValueCommand(baseKey, key, valueName, value);
            IServiceCommandResponse response = await _commandBridge.SendCommandAsync(command);

            response.ThrowIfError();
        }
Example #3
0
        public static RegistryHive BaseKeyToHive(RegistryBaseKey baseKey)
        {
            switch (baseKey)
            {
            case RegistryBaseKey.ClassesRoot:
                return(RegistryHive.ClassesRoot);

            case RegistryBaseKey.CurrentUser:
                return(RegistryHive.CurrentUser);

            case RegistryBaseKey.LocalMachine:
                return(RegistryHive.LocalMachine);

            case RegistryBaseKey.Users:
                return(RegistryHive.Users);

            case RegistryBaseKey.PerformanceData:
                return(RegistryHive.PerformanceData);

            case RegistryBaseKey.CurrentConfig:
                return(RegistryHive.CurrentConfig);

            case RegistryBaseKey.DynData:
                return(RegistryHive.DynData);

            default:
                throw new ArgumentOutOfRangeException(nameof(baseKey), baseKey, null);
            }
        }
Example #4
0
        /// <summary>
        /// 获取指定注册表基项域对应顶级节点
        /// </summary>
        /// <returns>顶级节点</returns>
        private static RegistryKey GetTopKey(RegistryBaseKey baseKey)
        {
            RegistryKey key;

            switch (baseKey)
            {
            case RegistryBaseKey.ClassesRoot:
                key = Registry.ClassesRoot;
                break;

            case RegistryBaseKey.CurrentUser:
                key = Registry.CurrentUser;
                break;

            case RegistryBaseKey.LocalMachine:
                key = Registry.LocalMachine;
                break;

            case RegistryBaseKey.Users:
                key = Registry.Users;
                break;

            case RegistryBaseKey.CurrentConfig:
                key = Registry.CurrentConfig;
                break;

            default:
                key = Registry.LocalMachine;
                break;
            }
            return(key);
        }
Example #5
0
        public async Task <bool> ReadValueAsync(RegistryBaseKey baseKey, string key, string valueName, bool defaultValue)
        {
            var command = new RegistryReadIntValueCommand(baseKey, key, valueName, defaultValue ? 1 : 0);
            IServiceCommandResponse response = await _commandBridge.SendCommandAsync(command);

            response.ThrowIfError();
            return((int)response.Result != 0);
        }
Example #6
0
        public async Task <string> ReadValueAsync(RegistryBaseKey baseKey, string key, string valueName, string defaultValue)
        {
            var command = new RegistryReadStringValueCommand(baseKey, key, valueName, defaultValue);
            IServiceCommandResponse response = await _commandBridge.SendCommandAsync(command);

            response.ThrowIfError();
            return((string)response.Result);
        }
Example #7
0
 /// <summary>
 /// 删除指定的键值
 /// </summary>
 /// <param name="baseKey">基项域</param>
 /// <param name="subKeyName">注册表项</param>
 /// <param name="valueName">要检查的键值名称</param>
 public static void DeleteValue(RegistryBaseKey baseKey, string subKeyName, string valueName)
 {
     if (IsExistValueName(baseKey, subKeyName, valueName))
     {
         RegistryKey subKey = OpenSubKey(baseKey, subKeyName);
         subKey.DeleteValue(valueName);
     }
 }
Example #8
0
        /// <summary>
        /// 删除指定基项域中的注册表项
        /// </summary>
        /// <param name="baseKey">指定基项域</param>
        /// <param name="subKeyName">注册表项名称</param>
        public static void DeleteSubKey(RegistryBaseKey baseKey, string subKeyName)
        {
            RegistryKey topKey = GetTopKey(baseKey);

            if (IsExistSubKey(baseKey, subKeyName))
            {
                topKey.DeleteSubKey(subKeyName);
            }
        }
Example #9
0
        /// <summary>
        /// 在指定基项域中创建注册表项
        /// </summary>
        /// <param name="baseKey">定基项域</param>
        /// <param name="subKeyName">注册表项名称</param>
        public static void CreateSubKey(RegistryBaseKey baseKey, string subKeyName)
        {
            RegistryKey topKey = GetTopKey(baseKey);

            if (!IsExistSubKey(baseKey, subKeyName))
            {
                topKey.CreateSubKey(subKeyName);
            }
            topKey.Close();
        }
Example #10
0
        /// <summary>
        /// 删除指定基项域中的注册表项
        /// </summary>
        /// <param name="baseKey">指定基项域</param>
        /// <param name="subKeyName">注册表项名称</param>
        public static void DeleteSubKey(RegistryBaseKey baseKey, string subKeyName)
        {
            subKeyName.CheckNotNullOrEmpty("subKeyName");

            RegistryKey topKey = GetTopKey(baseKey);
            if (!IsExistsSubKey(baseKey, subKeyName))
            {
                topKey.DeleteSubKey(subKeyName);
            }
        }
Example #11
0
        /// <summary>
        /// 删除指定的键值
        /// </summary>
        /// <param name="baseKey">基项域</param>
        /// <param name="subKeyName">注册表项</param>
        /// <param name="valueName">要检查的键值名称</param>
        public static void DeleteValue(RegistryBaseKey baseKey, string subKeyName, string valueName)
        {
            subKeyName.CheckNotNullOrEmpty("subKeyName");
            valueName.CheckNotNullOrEmpty("valueName");

            if (IsExistValueName(baseKey, subKeyName, valueName))
            {
                RegistryKey subKey = OpenSubKey(baseKey, subKeyName);
                subKey.DeleteValue(valueName);
            }
        }
Example #12
0
        /// <summary>
        /// 在指定基项域中创建注册表项
        /// </summary>
        /// <param name="baseKey">定基项域</param>
        /// <param name="subKeyName">注册表项名称</param>
        public static void CreateSubKey(RegistryBaseKey baseKey, string subKeyName)
        {
            subKeyName.CheckNotNullOrEmpty("subKeyName");

            RegistryKey topKey = GetTopKey(baseKey);
            if (!IsExistSubKey(baseKey, subKeyName))
            {
                topKey.CreateSubKey(subKeyName);
            }
            topKey.Close();
        }
Example #13
0
        /// <summary>
        /// 在指定基项域中创建注册表项
        /// </summary>
        /// <param name="baseKey">定基项域</param>
        /// <param name="subKeyName">注册表项名称</param>
        public static void CreateSubKey(RegistryBaseKey baseKey, string subKeyName)
        {
            subKeyName.CheckNotNullOrEmpty("subKeyName");

            RegistryKey topKey = GetTopKey(baseKey);

            if (!IsExistSubKey(baseKey, subKeyName))
            {
                topKey.CreateSubKey(subKeyName);
            }
            topKey.Close();
        }
Example #14
0
        /// <summary>
        /// 获取指定键值的内容
        /// </summary>
        /// <param name="baseKey">基项域</param>
        /// <param name="subKeyName">注册表项</param>
        /// <param name="valueName">要检查的键值名称</param>
        /// <returns></returns>
        public static object GetValue(RegistryBaseKey baseKey, string subKeyName, string valueName)
        {
            object value = null;

            if (IsExistValueName(baseKey, subKeyName, valueName))
            {
                RegistryKey subKey = OpenSubKey(baseKey, subKeyName, writable: false);
                value = subKey.GetValue(valueName);
                subKey.Close();
            }
            return(value);
        }
Example #15
0
 protected RegistryReadValueCommand(
     ServiceCommandName commandName,
     RegistryBaseKey baseKey,
     string key,
     string valueName,
     T defaultValue)
     : base(commandName)
 {
     BaseKey      = baseKey;
     Key          = Param.VerifyString(key, nameof(key));
     ValueName    = valueName;
     DefaultValue = defaultValue;
 }
Example #16
0
        /// <summary>
        /// 是否存在指定的注册表项
        /// </summary>
        /// <param name="baseKey">要检查的基项域</param>
        /// <param name="subKeyName">要检查的注册表项名称</param>
        /// <returns>是否存在</returns>
        public static bool IsExistSubKey(RegistryBaseKey baseKey, string subKeyName)
        {
            bool        flag   = false;
            RegistryKey topKey = GetTopKey(baseKey);
            RegistryKey subKey = topKey.OpenSubKey(subKeyName);

            if (subKey != null)
            {
                flag = true;
            }
            topKey.Close();
            return(flag);
        }
Example #17
0
        /// <summary>
        /// 获取指定键值的内容
        /// </summary>
        /// <param name="baseKey">基项域</param>
        /// <param name="subKeyName">注册表项</param>
        /// <param name="valueName">要检查的键值名称</param>
        /// <returns></returns>
        public static object GetValue(RegistryBaseKey baseKey, string subKeyName, string valueName)
        {
            subKeyName.CheckNotNullOrEmpty("subKeyName");
            valueName.CheckNotNullOrEmpty("valueName");

            object value = null;
            if (IsExistsValueName(baseKey, subKeyName, valueName))
            {
                RegistryKey subKey = OpenSubKey(baseKey, subKeyName, false);
                value = subKey.GetValue(valueName);
                subKey.Close();
            }
            return value;
        }
Example #18
0
        /// <summary>
        /// 是否存在指定的注册表项
        /// </summary>
        /// <param name="baseKey">要检查的基项域</param>
        /// <param name="subKeyName">要检查的注册表项名称</param>
        /// <returns>true:存在,false:不存在</returns>
        public static bool IsExistsSubKey(RegistryBaseKey baseKey, string subKeyName)
        {
            subKeyName.CheckNotNullOrEmpty("subKeyName");

            bool flag = false;
            RegistryKey topKey = GetTopKey(baseKey);
            RegistryKey subKey = topKey.OpenSubKey(subKeyName);
            if (subKey != null)
            {
                flag = true;
            }
            topKey.Close();
            return flag;
        }
Example #19
0
        /// <summary>
        /// 检查指定注册表项中是否存在指定键值
        /// </summary>
        /// <param name="baseKey">基项域</param>
        /// <param name="subKeyName">注册表项</param>
        /// <param name="valueName">要检查的键值名称</param>
        /// <returns>是否存在</returns>
        public static bool IsExistValueName(RegistryBaseKey baseKey, string subKeyName, string valueName)
        {
            bool flag = false;

            if (IsExistSubKey(baseKey, subKeyName))
            {
                RegistryKey subKey = OpenSubKey(baseKey, subKeyName);
                if (subKey != null)
                {
                    string[] valueNames = subKey.GetValueNames();
                    if (valueNames.Any(name => string.CompareOrdinal(valueName, name) == 0))
                    {
                        flag = true;
                    }
                    subKey.Close();
                }
            }
            return(flag);
        }
Example #20
0
        /// <summary>
        /// 设置指定键值的内容,并指定数据类型
        /// </summary>
        /// <param name="baseKey">基项域</param>
        /// <param name="subKeyName">注册表项</param>
        /// <param name="valueName">要检查的键值名称</param>
        /// <param name="value">要设置的值</param>
        /// <param name="valueKind">要设置的值的数据类型</param>
        public static void SetValue(RegistryBaseKey baseKey, string subKeyName, string valueName, object value, RegistryValueKind valueKind)
        {
            //不存在注册表项,则创建之
            if (!IsExistSubKey(baseKey, subKeyName))
            {
                CreateSubKey(baseKey, subKeyName);
            }

            RegistryKey subKey = OpenSubKey(baseKey, subKeyName);

            try
            {
                subKey.SetValue(valueName, value, valueKind);
            }
            finally
            {
                subKey.Close();
            }
        }
Example #21
0
        /// <summary>
        /// 检查指定注册表项中是否存在指定键值
        /// </summary>
        /// <param name="baseKey">基项域</param>
        /// <param name="subKeyName">注册表项</param>
        /// <param name="valueName">要检查的键值名称</param>
        /// <returns>true:存在,false:不存在</returns>
        public static bool IsExistsValueName(RegistryBaseKey baseKey, string subKeyName, string valueName)
        {
            subKeyName.CheckNotNullOrEmpty("subKeyName");
            valueName.CheckNotNullOrEmpty("valueName");

            bool flag = false;
            if (IsExistsSubKey(baseKey, subKeyName))
            {
                RegistryKey subKey = OpenSubKey(baseKey, subKeyName);
                if (subKey != null)
                {
                    string[] valueNames = subKey.GetValueNames();
                    if (valueNames.Any(name => string.CompareOrdinal(valueName, name) == 0))
                    {
                        flag = true;
                    }
                    subKey.Close();
                }
            }
            return flag;
        }
Example #22
0
        /// <summary>
        /// 设置指定键值的内容
        /// </summary>
        /// <param name="baseKey">基项域</param>
        /// <param name="subKeyName">注册表项</param>
        /// <param name="valueName">要检查的键值名称</param>
        /// <param name="value">要设置的值</param>
        public static void SetValue(RegistryBaseKey baseKey, string subKeyName, string valueName, object value)
        {
            subKeyName.CheckNotNullOrEmpty("subKeyName");
            valueName.CheckNotNullOrEmpty("valueName");
            value.CheckNotNull("value");

            if (!IsExistsSubKey(baseKey, subKeyName))
            {
                CreateSubKey(baseKey, subKeyName);
            }

            RegistryKey subKey = OpenSubKey(baseKey, subKeyName);
            try
            {
                subKey.SetValue(valueName, value);
            }
            finally
            {
                subKey.Close();
            }
        }
Example #23
0
 /// <summary>
 /// 获取指定注册表基项域对应顶级节点
 /// </summary>
 /// <returns>顶级节点</returns>
 private static RegistryKey GetTopKey(RegistryBaseKey baseKey)
 {
     RegistryKey key;
     switch (baseKey)
     {
         case RegistryBaseKey.ClassesRoot:
             key = Registry.ClassesRoot;
             break;
         case RegistryBaseKey.CurrentUser:
             key = Registry.CurrentUser;
             break;
         case RegistryBaseKey.LocalMachine:
             key = Registry.LocalMachine;
             break;
         case RegistryBaseKey.Users:
             key = Registry.Users;
             break;
         case RegistryBaseKey.CurrentConfig:
             key = Registry.CurrentConfig;
             break;
         default:
             key = Registry.LocalMachine;
             break;
     }
     return key;
 }
Example #24
0
        /// <summary>
        /// 设置指定键值的内容,并指定数据类型
        /// </summary>
        /// <param name="baseKey">基项域</param>
        /// <param name="subKeyName">注册表项</param>
        /// <param name="valueName">要检查的键值名称</param>
        /// <param name="value">要设置的值</param>
        /// <param name="valueKind">要设置的值的数据类型</param>
        public static void SetValue(RegistryBaseKey baseKey, string subKeyName, string valueName, object value, RegistryValueKind valueKind)
        {
            subKeyName.CheckNotNullOrEmpty("subKeyName");
            valueName.CheckNotNullOrEmpty("valueName");

            //不存在注册表项,则创建之
            if (!IsExistSubKey(baseKey, subKeyName))
            {
                CreateSubKey(baseKey, subKeyName);
            }

            RegistryKey subKey = OpenSubKey(baseKey, subKeyName);
            try
            {
                subKey.SetValue(valueName, value, valueKind);
            }
            finally
            {
                subKey.Close();
            }
        }
Example #25
0
 /// <summary>
 /// 使用参数实例化一个注册表操作实例
 /// </summary>
 /// <param name="baseKey">注册表基项域</param>
 /// <param name="subKeyName">注册表项名称</param>
 public RegistryHelper(RegistryBaseKey baseKey, string subKeyName)
 {
     BaseKey = baseKey;
     SubKeyName = subKeyName ?? "Software\\";
 }
Example #26
0
        /// <summary>
        /// 是否存在指定的注册表项
        /// </summary>
        /// <param name="baseKey">要检查的基项域</param>
        /// <param name="subKeyName">要检查的注册表项名称</param>
        /// <returns>是否存在</returns>
        public static bool IsExistSubKey(RegistryBaseKey baseKey, string subKeyName)
        {
            subKeyName.CheckNotNullOrEmpty("subKeyName");

            bool flag = false;
            RegistryKey topKey = GetTopKey(baseKey);
            RegistryKey subKey = topKey.OpenSubKey(subKeyName);
            if (subKey != null)
            {
                flag = true;
            }
            topKey.Close();
            return flag;
        }
Example #27
0
        /// <summary>
        /// 检查指定注册表项中是否存在指定键值
        /// </summary>
        /// <param name="baseKey">基项域</param>
        /// <param name="subKeyName">注册表项</param>
        /// <param name="valueName">要检查的键值名称</param>
        /// <returns>是否存在</returns>
        public static bool IsExistValueName(RegistryBaseKey baseKey, string subKeyName, string valueName)
        {
            subKeyName.CheckNotNullOrEmpty("subKeyName");
            valueName.CheckNotNullOrEmpty("valueName");

            bool flag = false;
            if (IsExistSubKey(baseKey, subKeyName))
            {
                RegistryKey subKey = OpenSubKey(baseKey, subKeyName);
                if (subKey != null)
                {
                    string[] valueNames = subKey.GetValueNames();
                    if (valueNames.Any(name => string.CompareOrdinal(valueName, name) == 0))
                    {
                        flag = true;
                    }
                    subKey.Close();
                }
            }
            return flag;
        }
Example #28
0
        public void SetMockedValue(RegistryBaseKey baseKey, string key, string valueName, string value)
        {
            string path = ConstructFullPath(baseKey, key, valueName);

            _registry[path] = value;
        }
Example #29
0
        /// <summary>
        /// 获取指定键值的内容
        /// </summary>
        /// <param name="baseKey">基项域</param>
        /// <param name="subKeyName">注册表项</param>
        /// <param name="valueName">要检查的键值名称</param>
        /// <returns></returns>
        public static object GetValue(RegistryBaseKey baseKey, string subKeyName, string valueName)
        {
            subKeyName.CheckNotNullOrEmpty("subKeyName");
            valueName.CheckNotNullOrEmpty("valueName");

            object value = null;
            if (IsExistValueName(baseKey, subKeyName, valueName))
            {
                RegistryKey subKey = OpenSubKey(baseKey, subKeyName, writable: false);
                value = subKey.GetValue(valueName);
                subKey.Close();
            }
            return value;
        }
Example #30
0
 public RegistryReadStringValueCommand(RegistryBaseKey baseKey, string key, string valueName, string defaultValue)
     : base(ServiceCommandName.RegistryReadStringValue, baseKey, key, valueName, defaultValue)
 {
 }
Example #31
0
        /// <summary>
        /// 删除指定基项域中的注册表项
        /// </summary>
        /// <param name="baseKey">指定基项域</param>
        /// <param name="subKeyName">注册表项名称</param>
        public static void DeleteSubKey(RegistryBaseKey baseKey, string subKeyName)
        {
            subKeyName.CheckNotNullOrEmpty("subKeyName");

            RegistryKey topKey = GetTopKey(baseKey);
            if (IsExistSubKey(baseKey, subKeyName))
            {
                topKey.DeleteSubKey(subKeyName);
            }
        }
Example #32
0
        public async Task <string> ReadValueAsync(RegistryBaseKey baseKey, string key, string valueName, string defaultValue)
        {
            string value = ReadValue(baseKey, key, valueName, defaultValue);

            return(await Task.FromResult(value));
        }
Example #33
0
        public async Task <bool> ReadValueAsync(RegistryBaseKey baseKey, string key, string valueName, bool defaultValue)
        {
            int value = ReadValue(baseKey, key, valueName, defaultValue ? 1 : 0);

            return(await Task.FromResult(value != 0));
        }
Example #34
0
        private T ReadValue <T>(RegistryBaseKey baseKey, string key, string valueName, T defaultValue)
        {
            string path = ConstructFullPath(baseKey, key, valueName);

            return(_registry.ContainsKey(path) ? (T)_registry[path] : defaultValue);
        }
Example #35
0
 /// <summary>
 /// 使用参数实例化一个注册表操作实例
 /// </summary>
 /// <param name="baseKey">注册表基项域</param>
 /// <param name="subKeyName">注册表项名称</param>
 public RegistryHelper(RegistryBaseKey baseKey, string subKeyName)
 {
     BaseKey    = baseKey;
     SubKeyName = subKeyName ?? "Software\\";
 }
Example #36
0
 private static string ConstructFullPath(RegistryBaseKey baseKey, string key, string valueName)
 {
     return($@"{baseKey}\{key}\{valueName}");
 }
Example #37
0
 /// <summary>
 /// 打开注册表项节点,以只读的方式检查子项
 /// </summary>
 /// <param name="baseKey">基项域</param>
 /// <param name="subKeyName">注册表项名称</param>
 /// <param name="writable">true为只读访问,false为写访问</param>
 /// <returns></returns>
 private static RegistryKey OpenSubKey(RegistryBaseKey baseKey, string subKeyName, bool writable = true)
 {
     RegistryKey topKey = GetTopKey(baseKey);
     RegistryKey subKey = topKey.OpenSubKey(subKeyName, writable);
     topKey.Close();
     return subKey;
 }
Example #38
0
        /// <summary>
        /// 删除指定的键值
        /// </summary>
        /// <param name="baseKey">基项域</param>
        /// <param name="subKeyName">注册表项</param>
        /// <param name="valueName">要检查的键值名称</param>
        public static void DeleteValue(RegistryBaseKey baseKey, string subKeyName, string valueName)
        {
            subKeyName.CheckNotNullOrEmpty("subKeyName");
            valueName.CheckNotNullOrEmpty("valueName");

            if (IsExistValueName(baseKey, subKeyName, valueName))
            {
                RegistryKey subKey = OpenSubKey(baseKey, subKeyName);
                subKey.DeleteValue(valueName);
            }
        }
 public Task WriteValueAsync(RegistryBaseKey baseKey, string key, string valueName, string value)
 {
     return(Task.CompletedTask);
 }
 public RegistryWriteStringValueCommand(RegistryBaseKey baseKey, string key, string valueName, string value)
     : base(ServiceCommandName.RegistryWriteStringValue, baseKey, key, valueName, value)
 {
 }