запустить службу Windows - PullRequest
       1

запустить службу Windows

0 голосов
/ 30 января 2012

Я пишу службу 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
        }
    }

Я хочу, чтобы служба проверила другую службу и запустила ... Пожалуйста, помогите мне, как я могу это сделать

1 Ответ

5 голосов
/ 30 января 2012

Прежде всего, почему вы приводите свойство Status ServiceController из удобного перечисления ServiceControllerStatus к int? Лучше всего оставить это как перечисление. Тем более что ваш код Heartbeat, который сравнивает его с 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 секунд (или что-то еще), пока служба не перейдет в состояние выполнения.

ОБНОВЛЕНИЕ : Я перечитал исходный вопрос, и я думаю, что то, что вы пытаетесь сделать здесь, даже не следует делать с кодом. Если я правильно понял, вы хотите установить зависимость для вашего сервиса от сервиса WebClient при его установке. Затем, когда пользователь запускает вашу службу в диспетчере служб, он автоматически пытается запустить зависимую службу.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...