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; }

 

原创文章,作者:ItWorker,如若转载,请注明出处:https://blog.ytso.com/283121.html

(0)
上一篇 2022年8月30日
下一篇 2022年8月30日

相关推荐

发表回复

登录后才能评论