windows 每天运行任务计划程序两次,但不是每小时运行一次

nzkunb0c  于 2023-06-24  发布在  Windows
关注(0)|答案(3)|浏览(696)

我试图在任务调度程序中启动一个windows服务,每天运行两次,一次在下午12点,另一次在同一天的晚上10点。我想让它每天运行。这是可以做到的吗?先谢谢你了

xbp102n0

xbp102n01#

您需要创建两个单独的任务。

为了让这个过程更快一些,你可以创建第一个任务在12:00pm运行。然后只需export任务,并立即import名称略有不同的相同任务。编辑导入的任务,新时间为10:00pm

除非你需要它正好在12:00,否则你应该通过选中相应的框来编辑触发器以随机化时间。你可以根据需要设定延迟时间。

vof42yt1

vof42yt12#

我不确定这是否是一个新功能,因为这是我第一次想这样做,但我发现这个答案之前,我注意到,你可以设置多个触发器的任何任务。
因此,请设置您的任务第一次运行,然后转到该任务的触发器选项卡,单击新建,并设置您希望该任务第二次运行。
这比有多个任务更整洁。

wooyq4lh

wooyq4lh3#

public void RunOnTimer()
    {
        string timeToRunServ = "15:30"; //Time to run the report
        var timeArray = timeToRunServ.Split(';');
        CultureInfo provider = CultureInfo.InvariantCulture;

        foreach (var strTime in timeArray)
        {
            //foreach times in the timeArray, add the times into a TimeSpan list
            timeToRun.Add(TimeSpan.ParseExact(strTime, "g", provider));
        }

        timer = new Timer(50000);
        timer.Elapsed += new ElapsedEventHandler(timer_Elapsed);
        ResetTimer();
    }

    void ResetTimer()
    {
        Logs.WriteLog("Reset Timer called");
        TimeSpan currentTime = DateTime.Now.TimeOfDay;
        TimeSpan? nextRunTime = null;

        //foreach time in the timeToRun list
        foreach (TimeSpan runTime in timeToRun)
        {

            if (currentTime < runTime)
            {
                //If the current time is less than the run time(time has not passed), assgin the run time as the next run time
                nextRunTime = runTime;
                break;
            }
        }
        if (!nextRunTime.HasValue)
        {

            nextRunTime = timeToRun[0].Add(new TimeSpan(24, 0, 0));
        }
        timer.Interval = (nextRunTime.Value - currentTime).TotalMilliseconds;

        string interval = timer.Interval.ToString();

        Logs.WriteLog("timer interval is set to " + interval);

        timer.Enabled = true;
    }

    private void timer_Elapsed(object sender, System.Timers.ElapsedEventArgs e)
    {
        string day = DateTime.Today.DayOfWeek.ToString();

        timer.Enabled = false;
        Logs.WriteLog("Timer elapsed");

        StartProcess() // Call the task you want to perform here
        ResetTimer();
    }

相关问题