ServiceController просто застрял без каких-либо исключений

Я использую ServiceController для перезапуска Windows Server. Вот мой код 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 ответ

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

    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, чтобы использовать интервал времени.

Другие вопросы по тегам