/// <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; }
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(); }
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); } }
/// <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); }
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); }
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); }
/// <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); } }
/// <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); } }
/// <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(); }
/// <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); } }
/// <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); } }
/// <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(); }
/// <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); }
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; }
/// <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); }
/// <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; }
/// <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; }
/// <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); }
/// <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(); } }
/// <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; }
/// <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(); } }
/// <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; }
/// <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(); } }
/// <summary> /// 使用参数实例化一个注册表操作实例 /// </summary> /// <param name="baseKey">注册表基项域</param> /// <param name="subKeyName">注册表项名称</param> public RegistryHelper(RegistryBaseKey baseKey, string subKeyName) { BaseKey = baseKey; SubKeyName = subKeyName ?? "Software\\"; }
/// <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; }
/// <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; }
public void SetMockedValue(RegistryBaseKey baseKey, string key, string valueName, string value) { string path = ConstructFullPath(baseKey, key, valueName); _registry[path] = value; }
/// <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; }
public RegistryReadStringValueCommand(RegistryBaseKey baseKey, string key, string valueName, string defaultValue) : base(ServiceCommandName.RegistryReadStringValue, baseKey, key, valueName, defaultValue) { }
/// <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); } }
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)); }
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)); }
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); }
private static string ConstructFullPath(RegistryBaseKey baseKey, string key, string valueName) { return($@"{baseKey}\{key}\{valueName}"); }
/// <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; }
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) { }