RegeditHelper.cs 11 KB

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