2011-11-04 90 views
2

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

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

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

请让我知道,你的思想

回答

3

我面临类似的情况,我不得不开发一种服务,该服务只在交易时间从每天上午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 
} 
+1

你可以'Int32.TryParse(string,out int)'将字符串转换为整数的方法。如果字符串格式不正确,或者参数为null或字符串包含大整数,则“Int32.Parse”方法将引发异常。但是'Int32.TryParse'在这种情况下不会发生异常。如果字符串不能转换为整数,它将返回'false',否则返回'true',然后第二个参数将包含整数值。 –

+0

但是,如果您需要自己处理上述所有异常情况,那么可以使用'Int32.Parse'方法包装适当的'try ... catch'块并显示适当的消息。 –

+0

谢谢@Sayem,你可以编辑我的答案,并把'Int32.TryParse(string,out int)'而不是'Int32.Parse'方法。 –

6

通常情况下,如果这是你的要求,你会通过编写一个简单的控制台应用程序更好地服务,然后使用Windows Task Scheduler根据需要安排它。

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

+0

嗨,大家好,感谢您的快速回复。所有的建议看上去很不错。但是在我开始,我想与大家分享我的应用程序的场景..程序将全天候运行*场景编号1从上午8:00到下午5:00,应用程序将检查几个文件夹并扫描它们,如果文件夹包含一些文件..程序将创建附加所有文件的电子邮件并将发送给用户A *方案编号2从下午5:00到8:00是同一个进程将被执行,但不同的用户使用这种情况下,我可以使用你的建议..? – Link

+0

@link它取决于 - 如果您希望服务只是连续观看文件夹,那么最好在服务中使用FileSystemWatcher,并持续观看。如果你想拥有它在固定的时间运行,则任务计划程序是一个很好的选择,因为它可以让你轻松地更改计划... –

2

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

一个windows服务总是在运行,所以你希望你的服务能够休眠一段时间,唤醒检查当前时间是否在窗口中,以及它是否被执行。

这两种方法都有其优点和缺点,它更多地关注服务的功能。我不知道答案的一个问题是,如果计划任务的用户未登录,那么计划的任务是否会运行。这是我最关心的任务调度程序方法。

+0

嗨,大家好, 感谢您的快速回复。所有的建议看上去很不错..但在此之前我开始我想与大家分享我的应用程序的情况。该计划将通过24/7 *情景1号 从上午8:00持续到下午5:00的应用程序将检查几个文件夹和扫描他们,如果文件夹包含一些文件..该计划将建立一个电子邮件连接的所有文件和将被发送到用户A *案例数量2 从下午5:00到8:00同样的过程将被执行 但不同的用户 我们在这种情况下,我可以使用你的建议..? – Link

+0

如果它是不同的用户,我认为你真的想要与计划任务。否则你会打开一整套关于管理身份的蠕虫 - 它会变得很难看。 – Jason

+0

非常感谢你的帮助杰森..感激.. – Link

0

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

实例启动服务:

net start MyService 

实例停止服务

net stop MyService 
相关问题