如何在完成后停止 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);
所以,我有一个每小时启动一次的 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);