所以,我有一个Windows服务,每小时启动一次。它将查询一些数据库表并将数据放入其他表中。完成此操作后,我想停止服务,一小时后,它可以再次启动。我试过了:
this.Stop();
和
Service = new ServiceController(GlobalConstants.WindowsServiceName);
Service.Stop();
Service.WaitForStatus(ServiceControllerStatus.Stopped, new TimeSpan(0, 5, 0));
当我第一次执行时,它会运行,但我会收到一条意外停止的警报。事件查看器中没有错误。一切顺利,它只是留下一个可怕的警报。
当我做第二次时,它会停止并说它无法启动服务并达到超时。
如果我没有任何停止并且只是等待程序,则服务仍处于已启动状态。
目标
在没有任何警告类型警报或消息的情况下停止服务。如果同时调用OnStop()也会很好。
答案 0 :(得分:2)
您不必启动和停止服务。 Use a Timer
。将其间隔设置为一小时,并在计时器已过时事件中执行您的过程。
定义类级Timer
对象。在OnStart
中实例化并启用它。在Elapsed
事件中执行您的流程,例如:
private System.Timers.Timer serviceTimer;
protected override void OnStart(string[] args)
{
serviceTimer = new System.Timers.Timer();
serviceTimer.Interval = 3600000; //one hour
serviceTimer.Elapsed += serviceTimer_Elapsed;
serviceTimer.Enabled = true;
}
void serviceTimer_Elapsed(object sender, ElapsedEventArgs e)
{
serviceTimer.Enabled = false;
// do your process
serviceTimer.Enabled = true;
}
您还可以使用System.Threading.Timer
,您可以在其中指定要立即启动的计时器,然后每隔一小时执行一次,如:
System.Threading.Timer timer = new System.Threading.Timer(
new TimerCallback(YourMethod),
null,
0, //initial start time
3600000);