繁体   English   中英

启动Windows服务

[英]start Windows Service

我正在编写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
        }
    }

我希望该服务检查另一项服务并启动...请帮助我该怎么做

首先,为什么要将ServiceController的Status属性从方便的ServiceControllerStatus枚举转换为int? 最好将其保留为枚举。 特别是因为将与0进行比较的Heartbeat代码将永远不会运行,因为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秒(或任何其他时间),以使服务达到“运行”状态。

更新 :我重新阅读了原来的问题,并且我认为您甚至不应该使用代码来完成此处的操作。 如果我理解正确,则在安装时要在WebClient服务上为服务设置依赖项。 然后,当用户在服务管理器中启动您的服务时,它将自动尝试启动从属服务。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM