启动Windows服务

本文关键字:服务 Windows 启动 | 更新日期: 2023-09-27 18:21:48

我正在编写一个windows服务,它检查特定的服务并进行检查。如果它停止,它将启动它…

protected override void OnStart(string[] args)
    {
        Thread thread = new Thread(new ThreadStart(ServiceThreadFunction));
        thread.Start();
    }
public void ServiceThreadFunction()
    {
        try
        {
            ServiceController dc = new ServiceController("WebClient");
            //ServiceController[] services = ServiceController.GetServices();
            while (true)
            {
                if ((int)dc.Status == 1)
                {                  

                    dc.Start();
                    WriteLog(dc.Status.ToString);
                    if ((int)dc.Status == 0)
                    {
                        //heartbeat
                    }

                }
                else
                {
                    //service started
                }
                //Thread.Sleep(1000);
            }
        }
        catch (Exception ex)
        {
        // log errors
        }
    }

我想让服务检查另一项服务并启动。。。plz帮我怎么做

启动Windows服务

首先,为什么要将ServiceController的Status属性从方便的ServiceControllerStatus枚举强制转换为int?最好将其保留为枚举。特别是因为将其与0进行比较的心跳代码将永远不会运行,因为ServiceControllerStatus没有0作为可能的值。

其次,您不应该使用while(true)循环。即使有Thread.Sleep,你也会在那里评论,这是不必要的资源消耗。您只需使用WaitForStatus方法等待服务启动:

ServiceController sc = new ServiceController("WebClient");
if (sc.Status == ServiceControllerStatus.Stopped)
{
    sc.Start();
    sc.WaitForStatus (ServiceControllerStatus.Running, TimeSpan.FromSeconds(30));
}

这将等待长达30秒(或其他时间),以便服务达到"正在运行"状态。

UPDATE:我重读了最初的问题,我认为你在这里试图做的事情甚至不应该用代码来完成。如果我理解正确,您希望在安装WebClient服务时为其设置一个依赖项。然后,当用户在服务管理器中启动您的服务时,它将自动尝试启动依赖项服务。