ServiceHelper-Windows服務輔助類
using System; using System.Collections; using System.Configuration.Install; using System.ServiceProcess; namespace PowerEasy.Software.OfficeConvertHelper { /// <summary> /// Windows服務輔助類 /// </summary> internal class ServiceHelper { /// <summary> /// 檢查服務存在的存在性 /// </summary> /// <param name="nameService">服務名</param> /// <returns>存在返回 true,否則返回 false;</returns> public static bool IsServiceExisted(string nameService) { var services = ServiceController.GetServices(); foreach (var s in services) { if (s.ServiceName.ToLower() == nameService.ToLower()) { return true; } } return false; } /// <summary> /// 安裝Windows服務 /// </summary> /// <param name="filepath">程序文件路徑</param> public static void InstallService(string filepath) { IDictionary stateSaver = new Hashtable(); var installer = new AssemblyInstaller(); installer.UseNewContext = true; installer.Path = filepath; stateSaver.Clear(); installer.Install(stateSaver); installer.Commit(stateSaver); installer.Dispose(); } /// <summary> /// 卸載Windows服務 /// </summary> /// <param name="filepath">程序文件路徑</param> public static void UnInstallService(string filepath) { var installer = new AssemblyInstaller(); installer.UseNewContext = true; installer.Path = filepath; installer.Uninstall(null); installer.Dispose(); } /// <summary> /// 檢查Windows服務是否在運行 /// </summary> /// <param name="serviceName">程序的服務名</param> public static bool IsRunning(string serviceName) { bool isRun = false; try { if (!IsServiceExisted(serviceName)) { return false; } var sc = new ServiceController(serviceName); if (sc.Status == ServiceControllerStatus.StartPending || sc.Status == ServiceControllerStatus.Running) { isRun = true; } sc.Close(); } catch { isRun = false; } return isRun; } /// <summary> /// 啟動Windows服務 /// </summary> /// <param name="serviceName">程序的服務名</param> /// <returns>啟動成功返回 true,否則返回 false;</returns> public static bool StartService(string serviceName) { var sc = new ServiceController(serviceName); if (sc.Status == ServiceControllerStatus.Stopped || sc.Status == ServiceControllerStatus.StopPending ) { sc.Start(); sc.WaitForStatus(ServiceControllerStatus.Running, new TimeSpan(0, 0, 10)); } sc.Close(); return true; } /// <summary> /// 停止Windows服務 /// </summary> /// <param name="serviceName">程序的服務名</param> /// <returns>停止成功返回 true,否則返回 false;</returns> public static bool StopService(string serviceName) { var sc = new ServiceController(serviceName); if (sc.Status == ServiceControllerStatus.Running || sc.Status == ServiceControllerStatus.StartPending) { sc.Stop(); sc.WaitForStatus(ServiceControllerStatus.Stopped, new TimeSpan(0, 0, 10)); } sc.Close(); return true; } /// <summary> /// 重啟Windows服務 /// </summary> /// <param name="serviceName">程序的服務名</param> /// <returns>重啟成功返回 true,否則返回 false;</returns> public static bool RefreshService(string serviceName) { return StopService(serviceName) && StartService(serviceName); } } }
最後更新:2017-04-03 18:52:14