在特定时间运行Windows服务

时间:2011-11-04 02:03:20

标签: c# windows

Windows服务是否可以设置为在特定时间运行..?

示例

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

此过程可以每天,每周或一天运行..

请让我知道,你的想法

4 个答案:

答案 0 :(得分:6)

通常情况下,如果这是您的要求,您可以通过编写简单的控制台应用程序,然后使用Windows Task Scheduler根据需要进行安排来获得更好的服务。

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

答案 1 :(得分:3)

我遇到了类似的情况,我必须开发一项服务,只有在特定情况下每天上午11:00到下午3:00的交易时间才能做某事。它将在一天的剩余时间内保持闲置状态。我正在分享我在案件中所做的事情。我不确定它对你有帮助,但我希望它能成为你。

两个保持开始时间和结束时间的变量

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
}

答案 2 :(得分:2)

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

Windows服务始终在运行,因此您希望服务休眠一段时间,唤醒检查当前时间是否在窗口中,然后是否执行。

这两种方法都有其优点和缺点,而且更多的是关于服务的作用。我不知道答案的一个问题是,如果安排任务的用户没有登录,计划任务是否会运行。这将是我对任务调度程序方法的最大担忧。

答案 3 :(得分:0)

您可以做的是使用Windows任务计划程序并创建启动服务的任务,以及停止服务的另一项任务。您需要做的就是创建一个批处理文件来启动和停止服务。

示例启动服务:

net start MyService

停止服务示例

net stop MyService