如何在Windows服务完成后停止它?

时间:2015-01-21 16:18:44

标签: c# windows-services

所以,我有一个Windows服务,每小时启动一次。它将查询一些数据库表并将数据放入其他表中。完成此操作后,我想停止服务,一小时后,它可以再次启动。我试过了:

this.Stop();

Service = new ServiceController(GlobalConstants.WindowsServiceName);
Service.Stop();
            Service.WaitForStatus(ServiceControllerStatus.Stopped, new TimeSpan(0, 5, 0));

当我第一次执行时,它会运行,但我会收到一条意外停止的警报。事件查看器中没有错误。一切顺利,它只是留下一个可怕的警报。

当我做第二次时,它会停止并说它无法启动服务并达到超时。

如果我没有任何停止并且只是等待程序,则服务仍处于已启动状态。

目标

在没有任何警告类型警报或消息的情况下停止服务。如果同时调用OnStop()也会很好。

1 个答案:

答案 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);