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

How do I stop a Windows Service when it has completed?

所以,我有一个每小时启动一次的 windows 服务。它会查询一些数据库表并将数据放在其他表中。完成后,我想停止服务,这样一小时后,它可以再次启动。我试过:

this.Stop();

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

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

当我执行第二个操作时,它停止并说无法启动服务并超时。

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

目标

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

您不必启动和停止服务。 Use a Timer。将其间隔设置为一小时并在计时器已用事件中执行您的过程。

定义一个 class 级别的 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);