/// <summary> /// 停止服务 /// </summary> private static void StopService(IntPtr service) { ServiceState currState = GetServiceStatus(service); if (currState == ServiceState.Stopped) { return; } if (currState != ServiceState.StopPending) { //递归停止从属服务 string[] childSvs = EnumDependentServices(service, EnumServiceState.Active); if (childSvs.Length != 0) { IntPtr scm = OpenSCManager(); try { foreach (string childSv in childSvs) { StopService(Win32Class.OpenService(scm, childSv, Win32Class.SERVICE_STOP)); } } finally { Win32Class.CloseServiceHandle(scm); } } Win32Class.SERVICE_STATUS status = new Win32Class.SERVICE_STATUS(); Win32Class.ControlService(service, Win32Class.SERVICE_CONTROL_STOP, ref status); //发送停止指令 } if (!WaitForStatus(service, ServiceState.Stopped, new TimeSpan(0, 0, 30))) { throw new ApplicationException("停止服务失败!"); } }
/// <summary> /// 获取服务状态 /// </summary> private static ServiceState GetServiceStatus(IntPtr service) { Win32Class.SERVICE_STATUS status = new Win32Class.SERVICE_STATUS(); if (!Win32Class.QueryServiceStatus(service, ref status)) { throw new ApplicationException("获取服务状态出错!"); } return(status.currentState); }
/// <summary> /// 获取服务状态 /// </summary> private static ServiceState GetServiceStatus(IntPtr service) { Win32Class.SERVICE_STATUS status = new Win32Class.SERVICE_STATUS(); if (!Win32Class.QueryServiceStatus(service, ref status)) { throw new ApplicationException("获取服务状态出错!"); } return status.currentState; }