c# 如何验证Windows服务是否正在运行
0判断服务状态
using System.ServiceProcess; // ServiceController sc; try { sc = new ServiceController(SERVICE_NAME); } catch(ArgumentException) { return "Invalid service name."; // Note that just because a name is valid does not mean the service exists. } using(sc) { ServiceControllerStatus status; try { sc.Refresh(); // calling sc.Refresh() is unnecessary on the first use of `Status` but if you keep the ServiceController in-memory then be sure to call this if you're using it periodically. status = sc.Status; } catch(Win32Exception ex) { // A Win32Exception will be raised if the service-name does not exist or the running process has insufficient permissions to query service status. // See Win32 QueryServiceStatus()'s documentation. return "Error: " + ex.Message; } switch(status) { case ServiceControllerStatus.Running: return "Running"; case ServiceControllerStatus.Stopped: return "Stopped"; case ServiceControllerStatus.Paused: return "Paused"; case ServiceControllerStatus.StopPending: return "Stopping"; case ServiceControllerStatus.StartPending: return "Starting"; default: return "Status Changing"; } }
1. 操作WINDOW服务需要在C#里引入一个类库:System.ServiceProcess
//监测服务是否启动 private bool ServicesExists(string serviceName) { bool isbn = false; //获取所有服务 ServiceController[] services = ServiceController.GetServices(); try { foreach (ServiceController service in services) { if (service.ServiceName.ToUpper() == serviceName.ToUpper()) { isbn = true; break; } } return isbn; } catch (Exception ex) { return false; } } //启动服务 private bool ServiceStar(string serviceName) { bool isbn = false; try { if (ServicesExists(serviceName)) { ServiceController star_service = new ServiceController(serviceName); if (star_service.Status != ServiceControllerStatus.Running && star_service.Status != ServiceControllerStatus.StartPending) { star_service.Start(); for (int i = 0; i < 60; i++) { star_service.Refresh(); System.Threading.Thread.Sleep(1000); if (star_service.Status == ServiceControllerStatus.Running) { isbn = true; break; } if (i == 59) { isbn = false; } } } } } catch (Exception ex) { return false; } return isbn; } //停止服务 private bool ServiceStop(string serviceName) { bool isbn = false; try { if (ServicesExists(serviceName)) { ServiceController star_service = new ServiceController(serviceName); if (star_service.Status == ServiceControllerStatus.Running) { star_service.Stop(); for (int i = 0; i < 60; i++) { star_service.Refresh(); System.Threading.Thread.Sleep(1000); if (star_service.Status == ServiceControllerStatus.Stopped) { isbn = true; break; } if (i == 59) { isbn = false; } } } } } catch (Exception ex) { return false; } return isbn; }
// 判断服务状态
try { using(ServiceController sc = new ServiceController(SERVICE_NAME)) { return sc.Status == ServiceControllerStatus.Running; } } catch(ArgumentException) { return false; } catch(Win32Exception) { return false; }
活到老,学到老。