/// <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);
        }
Esempio n. 3
0
 /// <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;
 }
Esempio n. 4
0
 /// <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("停止服务失败!");
     }
 }