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