SoftwareTool.cs 6.1 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163
  1. //************************************************************************
  2. // author: yuzhengyang
  3. // date: 2018.3.27 - 2018.6.3
  4. // desc: 工具描述
  5. // Copyright (c) yuzhengyang. All rights reserved.
  6. //************************************************************************
  7. using Azylee.Core.DataUtils.CollectionUtils;
  8. using Azylee.Core.ProcessUtils;
  9. using Microsoft.Win32;
  10. using System;
  11. using System.Collections.Generic;
  12. using System.Diagnostics;
  13. using System.IO;
  14. using System.Linq;
  15. namespace Azylee.Core.WindowsUtils.InfoUtils
  16. {
  17. public class SoftwareTool
  18. {
  19. /// <summary>
  20. /// 存在控制面板
  21. /// </summary>
  22. /// <param name="name"></param>
  23. /// <returns></returns>
  24. public static bool ExistControl(string name)
  25. {
  26. if (GetControlList().Any(x => x.Name == name))
  27. return true;
  28. return false;
  29. }
  30. public static bool ExistControl(string[] names)
  31. {
  32. bool flag = false;
  33. if (ListTool.HasElements(names))
  34. {
  35. foreach (var n in names)
  36. {
  37. if (ExistControl(n))
  38. return true;
  39. }
  40. }
  41. return flag;
  42. }
  43. public static List<SoftwareInfo> GetControlList()
  44. {
  45. List<SoftwareInfo> result = new List<SoftwareInfo>();
  46. result.AddRange(GetControlList(Registry.LocalMachine.OpenSubKey("SOFTWARE\\Microsoft\\Windows\\CurrentVersion\\Uninstall")));
  47. result.AddRange(GetControlList(Registry.LocalMachine.OpenSubKey("SOFTWARE\\Wow6432Node\\Microsoft\\Windows\\CurrentVersion\\Uninstall")));
  48. result.AddRange(GetControlList(Registry.CurrentUser.OpenSubKey("SOFTWARE\\Microsoft\\Windows\\CurrentVersion\\Uninstall")));
  49. result.AddRange(GetControlList(Registry.CurrentUser.OpenSubKey("SOFTWARE\\Wow6432Node\\Microsoft\\Windows\\CurrentVersion\\Uninstall")));
  50. return result;
  51. }
  52. private static List<SoftwareInfo> GetControlList(RegistryKey key)
  53. {
  54. List<SoftwareInfo> result = new List<SoftwareInfo>();
  55. try
  56. {
  57. if (key != null)//如果系统禁止访问则返回null
  58. {
  59. foreach (string SubKeyName in key.GetSubKeyNames())
  60. {
  61. //打开对应的软件名称
  62. RegistryKey SubKey = key.OpenSubKey(SubKeyName);
  63. if (SubKey != null)
  64. {
  65. string name = SubKey.GetValue("DisplayName", "").ToString();
  66. string pub = SubKey.GetValue("Publisher", "").ToString();
  67. string version = SubKey.GetValue("DisplayVersion", "").ToString();
  68. string datestr = SubKey.GetValue("InstallDate", "").ToString();
  69. string sizestr = SubKey.GetValue("EstimatedSize", "").ToString();
  70. string helpurl = SubKey.GetValue("HelpLink", "").ToString();
  71. string abouturl = SubKey.GetValue("URLInfoAbout", "").ToString();
  72. DateTime date = DateTime.Parse("2001-10-25");//设置初始值为WindowsXP发布日期
  73. DateTime.TryParseExact(datestr, "yyyyMMdd", System.Globalization.CultureInfo.InvariantCulture, System.Globalization.DateTimeStyles.None, out date);
  74. if (date.Year < 2001) date = DateTime.Parse("2001-10-25");
  75. int size = 0;
  76. int.TryParse(sizestr, out size);
  77. result.Add(new SoftwareInfo()
  78. {
  79. Name = name,
  80. Publisher = pub,
  81. Version = version,
  82. InstallDate = date,
  83. EstimatedSize = size,
  84. HelpLink = helpurl,
  85. URLInfoAbout = abouturl,
  86. });
  87. }
  88. SubKey?.Close();
  89. }
  90. }
  91. key?.Close();
  92. }
  93. catch { }
  94. return result;
  95. }
  96. /// <summary>
  97. /// 存在进程
  98. /// </summary>
  99. /// <param name="name"></param>
  100. /// <returns></returns>
  101. public static bool ExistProcess(string name)
  102. {
  103. return ProcessTool.IsExists(name);
  104. }
  105. public static bool ExistProcess(string[] names)
  106. {
  107. bool flag = false;
  108. if (!ListTool.IsNullOrEmpty(names))
  109. {
  110. foreach (var n in names)
  111. {
  112. if (ExistProcess(n))
  113. return true;
  114. }
  115. }
  116. return flag;
  117. }
  118. /// <summary>
  119. /// 存在文件
  120. /// </summary>
  121. /// <param name="name"></param>
  122. /// <returns></returns>
  123. public static bool ExistFile(string name)
  124. {
  125. if (File.Exists(name))
  126. return true;
  127. return false;
  128. }
  129. public static bool ExistFile(string[] names)
  130. {
  131. bool flag = false;
  132. if (!ListTool.IsNullOrEmpty(names))
  133. {
  134. foreach (var n in names)
  135. {
  136. if (ExistFile(n))
  137. return true;
  138. }
  139. }
  140. return flag;
  141. }
  142. /// <summary>
  143. /// 存在注册表项
  144. /// </summary>
  145. /// <param name="item"></param>
  146. /// <param name="key"></param>
  147. /// <returns></returns>
  148. public static bool ExistRegist(string item, string key)
  149. {
  150. try
  151. {
  152. object obj = Registry.GetValue(item, key, null);
  153. if (obj != null)
  154. return true;
  155. }
  156. catch { }
  157. return false;
  158. }
  159. }
  160. }