RegeditHelper.cs 11 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301
  1. using Microsoft.Win32;
  2. using System;
  3. using System.Collections.Generic;
  4. using System.Linq;
  5. using System.Text;
  6. using System.Threading.Tasks;
  7. using TeamAAS_VP;
  8. namespace TeamAAS_VP.Core
  9. {
  10. /// <summary>
  11. /// 注册表操作
  12. /// </summary>
  13. public class RegeditHelper
  14. {
  15. /// <summary>
  16. /// 读取注册表
  17. /// </summary>
  18. /// <param name="value">读取到的注册表中的值</param>
  19. /// <returns>返回是否读取成功!</returns>
  20. public static bool ReadRegistryKey(out string value)
  21. {
  22. value = string.Empty;
  23. try
  24. {
  25. RegistryKey key = Registry.CurrentUser; //Registry.LocalMachine;
  26. if (IsRegeditItemExist()) //注册表存在(SOFTWARE\\TEAMScrew)
  27. {
  28. if (IsRegeditKeyExit()) //注册表中的键值存在(key)
  29. {
  30. //读取键值
  31. string info = "";
  32. RegistryKey software = key.OpenSubKey("SOFTWARE\\TEAMAAS");
  33. info = software.GetValue("license").ToString();
  34. value = info;
  35. software.Close();
  36. key.Close();
  37. return true;
  38. }
  39. else
  40. {
  41. key.Close();
  42. return false;
  43. }
  44. }
  45. else
  46. {
  47. key.Close();
  48. return false;
  49. }
  50. }
  51. catch (Exception ex)
  52. {
  53. LogHelper.WriteLogError("读取注册表时出错!", ex);
  54. return false;
  55. }
  56. }
  57. /// <summary>
  58. /// 写入注册表
  59. /// </summary>
  60. /// <param name="value">要写入的信息</param>
  61. /// <returns>返回是否写入成功</returns>
  62. public static bool WriteRegistryKey(string value)
  63. {
  64. try
  65. {
  66. //创建注册表项
  67. RegistryKey key = Registry.CurrentUser; //Registry.LocalMachine;
  68. RegistryKey software = key.CreateSubKey("SOFTWARE\\TEAMAAS");
  69. //在HKEY_LOCAL_MACHINE\SOFTWARE下新建名为test的注册表项。如果已经存在则不影响!
  70. //打开注册表项
  71. software = key.OpenSubKey("SOFTWARE\\TEAMAAS", true); //注意,如果该注册表项不存在,这调用这个方法会抛出异常
  72. //注意该方法后面还可以有一个布尔型的参数,true表示可以写入。
  73. //对键值的创建修改
  74. software = key.OpenSubKey("SOFTWARE\\TEAMAAS", true); //该项必须已存在
  75. software.SetValue("license", value);
  76. //在HKEY_LOCAL_MACHINE\SOFTWARE\TEAMScrew下创建一个名为“key”,值为“博客园”的键值。如果该键值原本已经存在,则会修改替换原来的键值,如果不存在则是创建该键值。
  77. // 注意:SetValue()还有第三个参数,主要是用于设置键值的类型,如:字符串,二进制,Dword等等~~默认是字符串。如:
  78. // software.SetValue("test", "0", RegistryValueKind.DWord); //二进制信息
  79. software.Close();
  80. key.Close();
  81. return true;
  82. }
  83. catch (Exception ex)
  84. {
  85. LogHelper.WriteLogError("注册表写入时出错!", ex);
  86. return false;
  87. }
  88. }
  89. /// <summary>
  90. /// 判断注册表是否存在
  91. /// </summary>
  92. /// <returns></returns>
  93. public static bool IsRegeditItemExist()
  94. {
  95. string[] subkeyNames;
  96. RegistryKey hkml = Registry.CurrentUser; //Registry.LocalMachine;
  97. RegistryKey software = hkml.OpenSubKey("SOFTWARE");
  98. //RegistryKey software = hkml.OpenSubKey("SOFTWARE", true);
  99. subkeyNames = software.GetSubKeyNames();
  100. //取得该项下所有子项的名称的序列,并传递给预定的数组中
  101. foreach (string keyName in subkeyNames) //遍历整个数组
  102. {
  103. if (keyName == "TEAMAAS") //判断子项的名称
  104. {
  105. hkml.Close();
  106. return true;
  107. }
  108. }
  109. hkml.Close();
  110. return false;
  111. }
  112. /// <summary>
  113. /// 判断键值是否存在
  114. /// </summary>
  115. /// <returns></returns>
  116. public static bool IsRegeditKeyExit()
  117. {
  118. string[] subkeyNames;
  119. RegistryKey hkml = Registry.CurrentUser; //Registry.LocalMachine;
  120. RegistryKey software = hkml.OpenSubKey("SOFTWARE\\TEAMAAS");
  121. //RegistryKey software = hkml.OpenSubKey("SOFTWARE\\test", true);
  122. subkeyNames = software.GetValueNames();
  123. //取得该项下所有键值的名称的序列,并传递给预定的数组中
  124. foreach (string keyName in subkeyNames)
  125. {
  126. if (keyName == "license") //判断键值的名称
  127. {
  128. hkml.Close();
  129. return true;
  130. }
  131. }
  132. hkml.Close();
  133. return false;
  134. }
  135. /// <summary>
  136. /// 是否时第一次在此PC上使用此软件
  137. /// </summary>
  138. /// <returns></returns>
  139. public static bool IsFirstUse()
  140. {
  141. try
  142. {
  143. if (IsRegeditItemExist()) //注册表存在(SOFTWARE\\TEAMScrew)
  144. {
  145. bool _isHaveKey = false;
  146. string[] subkeyNames;
  147. RegistryKey hkml = Registry.CurrentUser; //Registry.LocalMachine;
  148. RegistryKey software = hkml.OpenSubKey("SOFTWARE\\TEAMAAS");
  149. if (software==null)
  150. {
  151. return false;
  152. }
  153. //RegistryKey software = hkml.OpenSubKey("SOFTWARE\\test", true);
  154. subkeyNames = software.GetValueNames();
  155. //取得该项下所有键值的名称的序列,并传递给预定的数组中
  156. foreach (string keyName in subkeyNames)
  157. {
  158. if (keyName == "Use") //判断键值的名称
  159. {
  160. _isHaveKey = true;
  161. break;
  162. }
  163. }
  164. hkml.Close();
  165. software.Close();
  166. return _isHaveKey;
  167. }
  168. else
  169. {
  170. return false;
  171. }
  172. }
  173. catch (Exception ex)
  174. {
  175. LogHelper.WriteLogError("检测软件是否首次启动时出错!",ex);
  176. return false;
  177. }
  178. }
  179. /// <summary>
  180. /// 写入注册表第一次使用软件的时间
  181. /// </summary>
  182. public static void WriteFirstLog()
  183. {
  184. try
  185. {
  186. //创建注册表项
  187. RegistryKey key = Registry.CurrentUser; //Registry.LocalMachine;
  188. RegistryKey software = key.CreateSubKey("SOFTWARE\\TEAMAAS");
  189. //在HKEY_LOCAL_MACHINE\SOFTWARE下新建名为test的注册表项。如果已经存在则不影响!
  190. //打开注册表项
  191. software = key.OpenSubKey("SOFTWARE\\TEAMAAS", true); //注意,如果该注册表项不存在,这调用这个方法会抛出异常
  192. //注意该方法后面还可以有一个布尔型的参数,true表示可以写入。
  193. //对键值的创建修改
  194. software = key.OpenSubKey("SOFTWARE\\TEAMAAS", true); //该项必须已存在
  195. software.SetValue("Use", DateTime.Now.ToString("yyyyMMddHHmmss"));
  196. //在HKEY_LOCAL_MACHINE\SOFTWARE\TEAMScrew下创建一个名为“key”,值为“博客园”的键值。如果该键值原本已经存在,则会修改替换原来的键值,如果不存在则是创建该键值。
  197. // 注意:SetValue()还有第三个参数,主要是用于设置键值的类型,如:字符串,二进制,Dword等等~~默认是字符串。如:
  198. // software.SetValue("test", "0", RegistryValueKind.DWord); //二进制信息
  199. software.Close();
  200. key.Close();
  201. }
  202. catch (Exception ex)
  203. {
  204. LogHelper.WriteLogError("写入注册表第一次使用软件的时间时出错!", ex);
  205. }
  206. }
  207. /// <summary>
  208. /// 写入软件版本号
  209. /// </summary>
  210. /// <param name="_AppVersion"></param>
  211. public static void WriteAppVersion(string _AppVersion)
  212. {
  213. try
  214. {
  215. //创建注册表项
  216. RegistryKey key = Registry.CurrentUser; //Registry.LocalMachine;
  217. RegistryKey software = key.CreateSubKey("SOFTWARE\\TEAMAAS");
  218. //在HKEY_LOCAL_MACHINE\SOFTWARE下新建名为test的注册表项。如果已经存在则不影响!
  219. //打开注册表项
  220. software = key.OpenSubKey("SOFTWARE\\TEAMAAS", true); //注意,如果该注册表项不存在,这调用这个方法会抛出异常
  221. //注意该方法后面还可以有一个布尔型的参数,true表示可以写入。
  222. //对键值的创建修改
  223. software = key.OpenSubKey("SOFTWARE\\TEAMAAS", true); //该项必须已存在
  224. software.SetValue("Version", _AppVersion);
  225. //在HKEY_LOCAL_MACHINE\SOFTWARE\TEAMScrew下创建一个名为“key”,值为“博客园”的键值。如果该键值原本已经存在,则会修改替换原来的键值,如果不存在则是创建该键值。
  226. // 注意:SetValue()还有第三个参数,主要是用于设置键值的类型,如:字符串,二进制,Dword等等~~默认是字符串。如:
  227. // software.SetValue("test", "0", RegistryValueKind.DWord); //二进制信息
  228. software.Close();
  229. key.Close();
  230. }
  231. catch (Exception ex)
  232. {
  233. LogHelper.WriteLogError("写入软件版本号时出错!", ex);
  234. }
  235. }
  236. }
  237. }