我有windows的服务,这是创建使用topshelf。有时此服务会被停止。所以我想让它自动重启。所以我们在顶层有一个onrecovery选项。现在我的问题是,当这个服务从故障中恢复时,我应该能够重新启动另一个服务,因为我的这个服务失败了。我将如何实现这一点?
发布于 2018-06-03 00:45:23
首先,您应该让该服务依赖于另一个服务,以确保它正在运行。
在启动时,服务应向该服务发送命令以重新启动其逻辑。
对于接收命令的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;
});
}
或者,您的恢复必须是重新启动该服务并启动该服务的命令。
https://stackoverflow.com/questions/50655134
复制相似问题