Прежде всего, вы должны иметь зависимость службы от этой другой службы, чтобы убедиться, что она работает.
При запуске служба должна отправить команду этой службе для перезапуска своей логики.
Чтобы сервис Topshelf
мог принимать команды, класс сервиса должен реализовать ServiceCustomCommand
или настроить его следующим образом:
HostFactory.New(x =>
{
x.Service<MyService>(sc =>
{
sc.ConstructUsing(() => new MyService());
…
// Handle custom commands
sc.WhenCustomCommandReceived((service, control, command) =>
service.CustomCommand(control, command));
});
});
Чтобы отправить команду в сервис, вы можете использоватьServiceController
. ExecuteCommand
:
using (var thatService = new ServiceController("ThatService"))
{
thatService.ExecuteCommand(0);
}
Если у вас нет команды для этой службы, вы также можете использовать ServiceController
Stop
и Start
служба:
using (var thatService = new ServiceController("ThatService"))
{
thatService.Stop();
SpinWait.SpinUntil(() =>
{
thatService.Refresh();
return thatService.Status == ServiceControllerStatus.Stopped;
});
thatService.Start();
SpinWait.SpinUntil(() =>
{
thatService.Refresh();
return thatService.Status == ServiceControllerStatus.Running;
});
}
Или ваше восстановление должно быть командой, в которой вы перезапускаете эту службу и запускаете эту службу.