ServiceController просто застрял без каких-либо исключений - PullRequest
1 голос
/ 14 апреля 2011

Я использую ServiceController для перезапуска сервера Windows.Вот мой код C #.

ServiceController service = new ServiceController("ServiceName");   
service.Stop();
service.WaitForStatus(ServiceControllerStatus.Stopped, 15000);
service.Start();
service.WaitForStatus(ServiceControllerStatus.Running, 15000);

Я отлично работаю на своей локальной машине, если служба "ServiceName" не существует, она выдает исключение, и это нормально.Но на сервере мне нужно, чтобы этот код работал, если служба с именем "ServiceName" не существует, я не получаю никаких исключений, и код просто застрял здесь:

service.Stop();

, и он ждет вечно ...В результате я не могу поймать это, я не могу сделать ничего, что он просто застрял.Кто-нибудь может мне помочь?

1 Ответ

1 голос
/ 14 апреля 2011

Вместо того, чтобы полагаться на исключение, если ваш код не может найти службу, как об этом:

    ServiceController service = ServiceController.GetServices()
        .Where(s => s.ServiceName == "ServiceName")
        .SingleOrDefault();

    if (service != null)
    {
        service.Stop();
        service.WaitForStatus(ServiceControllerStatus.Stopped, TimeSpan.FromSeconds(15));
        service.Start();
        service.WaitForStatus(ServiceControllerStatus.Running, TimeSpan.FromSeconds(15));
    }
    else
    {
        // Couldn't find service
    }

ПРИМЕЧАНИЕ. Мне пришлось изменить подпись ServiceControllerStatus.WaitForStaus, чтобы использовать интервал времени

...