WIndow服务操作
来源:互联网 发布:淘宝销售排行榜 编辑:程序博客网 时间:2024/05/13 02:01
01.using System; 02.using System.Collections.Generic; 03.using System.ComponentModel; 04.using System.Data; 05.using System.Drawing; 06.using System.Text; 07.using System.Windows.Forms; 08.using System.Collections; 09.using System.Configuration.Install; 10.using System.Collections.Specialized; 11.using System.ServiceProcess; 12. 13.namespace IAU.ServerInstall.BLL 14.{ 15. public class ServiceControl 16. { 17. /// <summary> 18. /// 注册服务(注册完就启动,已经存在的服务直接启动。) 19. /// </summary> 20. /// <param name="strServiceName">服务名称</param> 21. /// <param name="strServiceInstallPath">服务安装程序完整路径(.exe程序完整路径)</param> 22. public void Register(string strServiceName, string strServiceInstallPath) 23. { 24. IDictionary mySavedState = new Hashtable(); 25. 26. try 27. { 28. System.ServiceProcess.ServiceController service = new System.ServiceProcess.ServiceController(strServiceName); 29. 30. //服务已经存在则卸载 31. if (ServiceIsExisted(strServiceName)) 32. { 33. //StopService(strServiceName); 34. UnInstallService(strServiceName, strServiceInstallPath); 35. } 36. service.Refresh(); 37. //注册服务 38. AssemblyInstaller myAssemblyInstaller = new AssemblyInstaller(); 39. 40. mySavedState.Clear(); 41. myAssemblyInstaller.Path = strServiceInstallPath; 42. myAssemblyInstaller.UseNewContext = true; 43. myAssemblyInstaller.Install(mySavedState); 44. myAssemblyInstaller.Commit(mySavedState); 45. myAssemblyInstaller.Dispose(); 46. 47. service.Start(); 48. } 49. catch (Exception ex) 50. { 51. throw new Exception("注册服务时出错:" + ex.Message); 52. } 53. } 54. 55. /// <summary> 56. /// 卸载服务 57. /// </summary> 58. /// <param name="strServiceName">服务名称</param> 59. /// <param name="strServiceInstallPath">服务安装程序完整路径(.exe程序完整路径)</param> 60. public void UnInstallService(string strServiceName, string strServiceInstallPath) 61. { 62. try 63. { 64. if (ServiceIsExisted(strServiceName)) 65. { 66. //UnInstall Service 67. AssemblyInstaller myAssemblyInstaller = new AssemblyInstaller(); 68. myAssemblyInstaller.UseNewContext = true; 69. myAssemblyInstaller.Path = strServiceInstallPath; 70. myAssemblyInstaller.Uninstall(null); 71. myAssemblyInstaller.Dispose(); 72. } 73. } 74. catch (Exception ex) 75. { 76. throw new Exception("卸载服务时出错:" + ex.Message); 77. } 78. } 79. 80. 81. /// <summary> 82. /// 判断服务是否存在 83. /// </summary> 84. /// <param name="serviceName">服务名</param> 85. /// <returns></returns> 86. public bool ServiceIsExisted(string serviceName) 87. { 88. ServiceController[] services = ServiceController.GetServices(); 89. foreach (ServiceController s in services) 90. { 91. if (s.ServiceName == serviceName) 92. { 93. return true; 94. } 95. } 96. return false; 97. } 98. 99. /// <summary> 100. /// 启动服务(启动存在的服务,30秒后启动失败报错) 101. /// </summary> 102. /// <param name="serviceName">服务名</param> 103. public void StartService(string serviceName) 104. { 105. if (ServiceIsExisted(serviceName)) 106. { 107. System.ServiceProcess.ServiceController service = new System.ServiceProcess.ServiceController(serviceName); 108. if (service.Status != System.ServiceProcess.ServiceControllerStatus.Running && service.Status != System.ServiceProcess.ServiceControllerStatus.StartPending) 109. { 110. service.Start(); 111. for (int i = 0; i < 30; i++) 112. { 113. service.Refresh(); 114. System.Threading.Thread.Sleep(1000); 115. if (service.Status == System.ServiceProcess.ServiceControllerStatus.Running) 116. { 117. break; 118. } 119. if (i == 29) 120. { 121. throw new Exception("服务" + serviceName + "启动失败!"); 122. } 123. } 124. } 125. } 126. } 127. 128. /// <summary> 129. /// 停止服务(停止存在的服务,30秒后停止失败报错) 130. /// </summary> 131. /// <param name="serviceName"></param> 132. public void StopService(string serviceName) 133. { 134. if (ServiceIsExisted(serviceName)) 135. { 136. System.ServiceProcess.ServiceController service = new System.ServiceProcess.ServiceController(serviceName); 137. if (service.Status == System.ServiceProcess.ServiceControllerStatus.Running) 138. { 139. service.Stop(); 140. for (int i = 0; i < 30; i++) 141. { 142. service.Refresh(); 143. System.Threading.Thread.Sleep(1000); 144. if (service.Status == System.ServiceProcess.ServiceControllerStatus.Stopped) 145. { 146. break; 147. } 148. if (i == 29) 149. { 150. throw new Exception("服务" + serviceName + "停止失败!"); 151. } 152. } 153. } 154. } 155. } 156. } 157.}