ServiceManagement.cs 5.7 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190
  1. using System;
  2. using System.Collections.Generic;
  3. using System.Linq;
  4. using System.Text;
  5. using System.Windows.Forms;
  6. using System.ComponentModel; // 先添加该引用
  7. namespace LYFZ.WindowsServiceHandling
  8. {
  9. /// <summary>
  10. /// 服务类型
  11. /// </summary>
  12. public enum ServiceType
  13. {
  14. /// <summary>
  15. /// 主服务
  16. /// </summary>
  17. [Description("LYFZ.WcfSystmeService.exe")]
  18. LYFZ_WcfSystmeService,
  19. /// <summary>
  20. /// 测试
  21. /// </summary>
  22. [Description("Test.exe")]
  23. Test
  24. }
  25. /// <summary>
  26. /// 服务管理
  27. /// </summary>
  28. public class ServiceManagement
  29. {
  30. /// <summary>
  31. /// 获取服务程序名 如:LYFZ.SystmeService.exe
  32. /// </summary>
  33. /// <param name="e"></param>
  34. /// <returns></returns>
  35. public static string GetServiceProgramName(ServiceType e)
  36. {
  37. return LYFZ.WinAPI.CustomPublicMethod.ConvertEnumToDescription(e);
  38. }
  39. /// <summary>
  40. /// 获取服务名 如:LYFZ_SystmeService
  41. /// </summary>
  42. /// <param name="e"></param>
  43. /// <returns></returns>
  44. public static string GetServiceName(ServiceType e)
  45. {
  46. return e.ToString();
  47. }
  48. /// <summary>
  49. /// 安装服务
  50. /// </summary>
  51. /// <param name="ServiceProgram">服务程序名称,如:“WindowsService.exe”</param>
  52. /// <returns></returns>
  53. public static bool InstallService(string ServiceProgram)
  54. {
  55. string[] args = { ServiceProgram };
  56. return ExecuteServiceCommand(args);
  57. }
  58. /// <summary>
  59. /// 卸载服务
  60. /// </summary>
  61. /// <param name="ServiceProgram">服务程序名称,如:“WindowsService.exe”</param>
  62. /// <returns></returns>
  63. public static bool UninstallService(string ServiceProgram)
  64. {
  65. string[] args = { "/u", ServiceProgram };
  66. return ExecuteServiceCommand(args);
  67. }
  68. /// <summary>
  69. /// 执行服务Install命令
  70. /// </summary>
  71. /// <param name="args">参数 args 就是你用 InstallUtil.exe 工具安装时的参数</param>
  72. /// <returns></returns>
  73. public static bool ExecuteServiceCommand(string[] args)
  74. {
  75. try
  76. {
  77. System.Configuration.Install.ManagedInstallerClass.InstallHelper(args);
  78. //参数 args 就是你用 InstallUtil.exe 工具安装时的参数。一般就是一个exe的文件名
  79. return true;
  80. }
  81. catch
  82. {
  83. return false;
  84. }
  85. }
  86. /// <summary>
  87. /// 检查指定的服务是否存在。
  88. /// </summary>
  89. /// <param name="serviceName">要查找的服务名字</param>
  90. /// <returns></returns>
  91. public static bool ServiceIsExisted(string svcName)
  92. {
  93. System.ServiceProcess.ServiceController[] services = System.ServiceProcess.ServiceController.GetServices();
  94. foreach (System.ServiceProcess.ServiceController s in services)
  95. {
  96. if (s.ServiceName == svcName)
  97. {
  98. return true;
  99. }
  100. }
  101. return false;
  102. }
  103. /// <summary>
  104. /// 检查服务是否正在运行
  105. /// </summary>
  106. /// <param name="ServiceName"></param>
  107. /// <returns></returns>
  108. public static bool CheckServiceIsRunning(string ServiceName)
  109. {
  110. try
  111. {
  112. System.ServiceProcess.ServiceController s = new System.ServiceProcess.ServiceController(ServiceName);
  113. if (s.Status == System.ServiceProcess.ServiceControllerStatus.Running)
  114. {
  115. return true;
  116. }
  117. else
  118. {
  119. return false;
  120. }
  121. }
  122. catch { return false; }
  123. }
  124. /// <summary>
  125. /// 启动服务
  126. /// </summary>
  127. /// <param name="ServiceName"></param>
  128. public static string StartService(string ServiceName)
  129. {
  130. if (ServiceIsExisted(ServiceName))
  131. {
  132. System.ServiceProcess.ServiceController s = new System.ServiceProcess.ServiceController(ServiceName);
  133. if (s.Status == System.ServiceProcess.ServiceControllerStatus.Stopped)
  134. {
  135. s.Start();
  136. return("“"+s.DisplayName+"”启动成功");
  137. //System.Diagnostics.Process.Start("cmd.exe");//启动一个外部应用程序
  138. }
  139. else
  140. {
  141. return ("“" + s.DisplayName + "”正在运行...");
  142. }
  143. }
  144. else {
  145. return ("要启动的服务不存在,请先安装服务...");
  146. }
  147. }
  148. /// <summary>
  149. /// 停止服务
  150. /// </summary>
  151. /// <param name="ServiceName"></param>
  152. public static string StopService(string ServiceName)
  153. {
  154. if (ServiceIsExisted(ServiceName))
  155. {
  156. System.ServiceProcess.ServiceController s = new System.ServiceProcess.ServiceController(ServiceName);
  157. if (s.Status == System.ServiceProcess.ServiceControllerStatus.Running)
  158. {
  159. s.Stop();
  160. return ("“" + s.DisplayName + "”停止成功");
  161. }
  162. else
  163. {
  164. return ("“" + s.DisplayName + "”已经停止");
  165. }
  166. }
  167. else
  168. {
  169. return ("要停止的服务不存在,无需停止!");
  170. }
  171. }
  172. #region 服务其它管理
  173. #endregion
  174. }
  175. }