Проблема с перезапуском другой службы windows из моей службы
Как я уже сказал в теме, у меня есть служба, которая работает под управлением 64bit из-за проблем с печатью в windows 10. Так что теперь нужно реализовать, пока мой сервис запущен, чтобы перезапустить anoter service из моего сервиса. Но это не работает. Он просто вводит метод service.start() и ничего не делает...
Если я попробую это сделать из одного приложения windows form, все будет в порядке.
Что я уже пробовал:
//у меня есть метод
Task.Run(() => RegisteSomeService())
//.
//.
//.
//когда этот метод входит в исключение, я хочу попробовать перезапустить службу с помощью этого кода...
//сначала я спрашиваю, остановлена ли служба, если да, то только запуск, если нет, то перезапуск ... //но в исключении нет ничего, не знаю почему
public static void RestartService(string serviceName) { try { var timeout = TimeSpan.FromMilliseconds(60 * 1000); $"GetStatus([{serviceName}]) - Start".Trace(); if (GetStatus(serviceName) != ServiceControllerStatus.Stopped) { try { var service = new ServiceController(serviceName); service.Stop(); service.WaitForStatus(ServiceControllerStatus.Stopped, timeout); service.Start(); service.WaitForStatus(ServiceControllerStatus.Running, timeout); } catch (Exception ex) { throw ex; } } else { try { $"Service Start - Start".Trace(); var serviceStart = new ServiceController(serviceName); serviceStart.Start(); serviceStart.WaitForStatus(ServiceControllerStatus.Running, timeout); $"Service Start - End".Trace(); } catch (Exception ex) { throw ex; } } } catch (Exception ex) { throw ex; } } public static ServiceControllerStatus GetStatus(string serviceName) { ServiceController service = null; try { service = ServiceController.GetServices().Where(s => s.ServiceName == serviceName).FirstOrDefault(); } catch (Exception ex) { throw new Exception("Service controller status - GetStatus: " + ex.ToString()); } $"GetStatus([{serviceName}]) - END {service.Status}".Trace(); return service.Status; }
F-ES Sitecore
Я бы избавился от таймаутов для начала, а также подумал о том, чтобы просто использовать перезапуск, а не останавливаться и начинать. Диспетчер управления службами может только дать команду службе завершить работу, нет никакой гарантии, что она завершила работу или сколько времени это займет. Проблема может заключаться в том, что останавливаемая служба неправильно реагирует на запрос об остановке или не отвечает вовремя.