RegisterTool.cs 6.6 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193
  1. //************************************************************************
  2. // author: yuzhengyang
  3. // date: 2017.3.29 - 2017.6.13
  4. // desc: 注册表操作工具
  5. // Copyright (c) yuzhengyang. All rights reserved.
  6. //************************************************************************
  7. using Microsoft.Win32;
  8. using System;
  9. namespace Azylee.Core.WindowsUtils.RegisterUtils
  10. {
  11. /// <summary>
  12. /// 注册表操作工具
  13. /// </summary>
  14. public class RegisterTool
  15. {
  16. [Obsolete("SetValue",true)]
  17. public static bool Write(string key, string name, string value)
  18. {
  19. try
  20. {
  21. RegistryKey RKey = Registry.LocalMachine.OpenSubKey(key, true);
  22. if (RKey == null)
  23. RKey = Registry.LocalMachine.CreateSubKey(key);
  24. RKey.SetValue(name, value);
  25. return true;
  26. }
  27. catch (Exception e)
  28. {
  29. return false;
  30. }
  31. }
  32. [Obsolete("GetValue", true)]
  33. public static string Read(string key, string name)
  34. {
  35. try
  36. {
  37. RegistryKey RKey = Registry.LocalMachine.OpenSubKey(key, true);
  38. if (RKey != null)
  39. {
  40. return RKey.GetValue(name) != null ? RKey.GetValue(name).ToString() : "";
  41. }
  42. }
  43. catch (Exception e) { }
  44. return null;
  45. }
  46. [Obsolete("DeleteValue", true)]
  47. public static bool Delete(string key, string name)
  48. {
  49. try
  50. {
  51. RegistryKey RKey = Registry.LocalMachine.OpenSubKey(key, true);
  52. if (RKey != null)
  53. RKey.DeleteValue(name);
  54. return true;
  55. }
  56. catch (Exception e)
  57. {
  58. return false;
  59. }
  60. }
  61. /// <summary>
  62. /// 添加注册表值
  63. /// </summary>
  64. /// <param name="key"></param>
  65. /// <param name="name"></param>
  66. /// <param name="value"></param>
  67. /// <returns></returns>
  68. public static bool SetValue(string key, string name, string value)
  69. {
  70. try
  71. {
  72. using (RegistryKey RKey = Create(key))
  73. {
  74. RKey.SetValue(name, value);
  75. }
  76. return true;
  77. }
  78. catch (Exception e)
  79. {
  80. return false;
  81. }
  82. }
  83. /// <summary>
  84. /// 读取注册表值
  85. /// </summary>
  86. /// <param name="key"></param>
  87. /// <param name="name"></param>
  88. /// <returns></returns>
  89. public static string GetValue(string key, string name)
  90. {
  91. try
  92. {
  93. using (RegistryKey RKey = Open(key, false))
  94. {
  95. if (RKey != null)
  96. {
  97. return RKey.GetValue(name) != null ? RKey.GetValue(name).ToString() : "";
  98. }
  99. }
  100. }
  101. catch (Exception e) { }
  102. return null;
  103. }
  104. /// <summary>
  105. /// 删除注册表值
  106. /// </summary>
  107. /// <param name="key"></param>
  108. /// <param name="name"></param>
  109. /// <returns></returns>
  110. public static bool DeleteValue(string key, string name)
  111. {
  112. try
  113. {
  114. using (RegistryKey RKey = Open(key, true))
  115. {
  116. if (RKey != null)
  117. RKey.DeleteValue(name);
  118. }
  119. return true;
  120. }
  121. catch (Exception e)
  122. {
  123. return false;
  124. }
  125. }
  126. /// <summary>
  127. /// 分离注册表根目录和子目录
  128. /// </summary>
  129. /// <param name="key"></param>
  130. /// <param name="reg"></param>
  131. /// <param name="sub"></param>
  132. /// <returns></returns>
  133. private static bool ExtractInfo(string key, out string reg, out string sub)
  134. {
  135. reg = ""; sub = "";
  136. int splitPos = 1;
  137. if ((splitPos = key.IndexOf('\\')) > 0)
  138. {
  139. reg = key.Substring(0, splitPos);
  140. sub = key.Substring(splitPos + 1);
  141. return true;
  142. }
  143. return false;
  144. }
  145. /// <summary>
  146. /// 打开注册表相应目录
  147. /// </summary>
  148. /// <param name="key">目标子项</param>
  149. /// <param name="writable">是否具有写权限</param>
  150. /// <returns></returns>
  151. private static RegistryKey Open(string key, bool writable)
  152. {
  153. string regkey, subkey;
  154. if (ExtractInfo(key, out regkey, out subkey))
  155. {
  156. switch (regkey)
  157. {
  158. case "HKEY_CLASSES_ROOT": return Registry.ClassesRoot.OpenSubKey(subkey, writable);
  159. case "HKEY_CURRENT_USER": return Registry.CurrentUser.OpenSubKey(subkey, writable);
  160. case "HKEY_LOCAL_MACHINE": return Registry.LocalMachine.OpenSubKey(subkey, writable);
  161. case "HKEY_USERS": return Registry.Users.OpenSubKey(subkey, writable);
  162. case "HKEY_CURRENT_CONFIG": return Registry.CurrentConfig.OpenSubKey(subkey, writable);
  163. default: return Registry.CurrentUser.OpenSubKey(subkey, writable);
  164. }
  165. }
  166. return Registry.CurrentUser.OpenSubKey(subkey, writable);
  167. }
  168. /// <summary>
  169. /// 创建或打开注册表相应目录
  170. /// </summary>
  171. /// <param name="key">目标子项</param>
  172. /// <returns></returns>
  173. private static RegistryKey Create(string key)
  174. {
  175. string regkey, subkey;
  176. if (ExtractInfo(key, out regkey, out subkey))
  177. {
  178. switch (regkey)
  179. {
  180. case "HKEY_CLASSES_ROOT": return Registry.ClassesRoot.CreateSubKey(subkey);
  181. case "HKEY_CURRENT_USER": return Registry.CurrentUser.CreateSubKey(subkey);
  182. case "HKEY_LOCAL_MACHINE": return Registry.LocalMachine.CreateSubKey(subkey);
  183. case "HKEY_USERS": return Registry.Users.CreateSubKey(subkey);
  184. case "HKEY_CURRENT_CONFIG": return Registry.CurrentConfig.CreateSubKey(subkey);
  185. default: return Registry.CurrentUser.CreateSubKey(subkey);
  186. }
  187. }
  188. return Registry.CurrentUser.CreateSubKey(subkey);
  189. }
  190. }
  191. }