在不使用任务计划程序的情况下计划Windows服务

时间:2019-01-21 12:17:22

标签: c# windows scheduled-tasks

我有一个Windows服务,可从特定文件夹中存档文件。我希望该程序每天在特定时间运行。我可以使用任务计划程序来做到这一点。我要做的是在不实际评估Windows Task Scheduler GUI的情况下计划任务。也许一个批处理脚本可以安排程序每天运行,即使系统处于睡眠状态也可以执行其他操作? 有谁知道如何实现此功能?

1 个答案:

答案 0 :(得分:0)

解决方案非常简单。所以问题是,我们不用在代码中创建调度程序,而是使用了任务调度程序,因此将创建一个线程,该线程将始终检查我希望实际代码运行的时间以及当前时间是我希望该方法运行的时间,它将触发主程序(在示例中,我要触发的方法名为ArchiveFile)。 因此,首先在OnStart中,我要设置一个新计时器,并希望它每小时触发24x7。 然后在timer_elapse中,我想检查当前时间是否是我要执行我的方法的时间,如果为true,它将调用我要执行的方法。(在此示例中,我将时间设置为9 pm或21小时)

    protected override void OnStart(string[] args)
    {
        timer = new System.Timers.Timer();                                        
        timer.Interval = 36000;                                                   // that fires every hour    
        timer.Elapsed += new System.Timers.ElapsedEventHandler(timer_Elapsed);    //calling the elapse event when the timer elapses
        timer.AutoReset = true;                                                   // AutoReset is set to true as we want the timer to fire 24x7 so that the elapse event is executed only at the requried time  
        timer.Enabled = true;                                                                                                   

    }
    protected void timer_Elapsed(object sender, System.Timers.ElapsedEventArgs e)       //everytime the elapse event occurs the TimeCheck method will be called 
    {
        TimeCheck();    
    }

    public void TimeCheck()    //method to check if the current time is the time we want the archiving to occur
    {

        var dt = DateTime.Now.Hour;
        if(dt==21)
        {
            Archivefile();
        }

    }