在指定时间运行windows服务

本文关键字:windows 服务 运行 定时间 | 更新日期: 2023-09-27 18:13:23

windows服务可以设置为在特定时间运行吗?

例子
From 8:00 am to 5:00pm run process 
From 5:00 pm to 8:00am run process

这个过程可以每天、每周或一天运行。

请让我知道,你的想法

在指定时间运行windows服务

通常,如果这是您的需求,您最好编写一个简单的控制台应用程序,然后使用Windows任务调度程序根据需要调度它。

这将提供与服务相同的好处,但允许您在部署后对调度进行更多控制。

我遇到了一个类似的情况,我必须开发一个只在交易时间(每天上午11点到下午3点)做一些事情的服务。这一天剩下的时间里,它就一直闲置着。我在分享我在我的案例中所做的。我不确定它是否对你有帮助,但我希望它会有帮助。

维持起始时间和结束时间的两个变量

TimeSpan StartingTime = new TimeSpan(
                             Int32.Parse(
                               ConfigurationManager
                                  .AppSettings["StartingTimeHour"]), 
                             Int32.Parse(
                               ConfigurationManager
                                   .AppSettings["StartingTimeMinute"]), 0);
TimeSpan EndingTime = new TimeSpan(
                             Int32.Parse(
                               ConfigurationManager
                                   .AppSettings["EndingTimeHour"]), 
                             Int32.Parse(
                               ConfigurationManager
                                   .AppSettings["EndingTimeMinute"]), 0);
//Starting time and Ending time may change in future. So I used app.config 
//instead of fixing them to (11,0,0) and (15,0,0) respectively

检查是否为交易时间的方法

public bool TradingTime()
{                        
    TimeSpan CurrentTime = DateTime.Now.TimeOfDay;
    return ((CurrentTime > StartingTime) && (CurrentTime < EndingTime));            
}

然后需要检查时间并根据时间执行一些操作:

while (TradingTime())
{
    //do whatever required
}

有几种方法可以做到这一点。从编码的角度来看,最简单的方法是编写一个控制台应用程序,然后使用任务调度程序运行它。

一个windows服务总是在运行,所以你会希望你的服务休眠一段时间,醒来检查当前时间是否在窗口中,如果是,然后执行。

两种方法都有各自的优点和缺点,更重要的是服务的功能。我不知道答案的一个问题是,如果计划任务的用户没有登录,计划任务是否会运行。这是我对任务调度器方法最大的担忧。

你能做的是使用Windows任务调度程序并创建一个任务来启动服务,另一个任务来停止服务。你所需要做的就是创建一个批处理文件来启动和停止服务。

示例Start Service:

net start MyService

停止服务示例

net stop MyService