更新已创建的任务的时间

时间:2014-12-03 14:00:59

标签: c# .net windows-scheduler

我在修改计算机上的任务时遇到问题。我正在尝试使用C#生成的互操作接口(从system32 / taskschd.dll生成的Interop.TaskScheduler.dll)

我只是想改变时间。

 void UpdateTaskDefintion(IRegisteredTask oldTask, TimeSpan ts)
    {
        ITaskDefinition newTask = oldTask.Definition;
        ITriggerCollection triggers = newTask.Triggers;
        IWeeklyTrigger trigger = (IWeeklyTrigger)triggers.Create(_TASK_TRIGGER_TYPE2.TASK_TRIGGER_WEEKLY);
        trigger.Enabled = true;

        trigger.StartBoundary = DateTime.Now.AddDays(1).Date.ToString("yyyy-MM-dd") + "T" + ts.ToString();

        _rootFolder.RegisterTaskDefinition(oldTask.Name, newTask, (int)_TASK_CREATION.TASK_UPDATE, null, null, _TASK_LOGON_TYPE.TASK_LOGON_INTERACTIVE_TOKEN, null);
    }

当它到达最后一行时,它会发出错误消息,(29,8):DaysOfWeek。我做错了什么?

更新并回答

使用下面的代码有点工作但不完全。它为我的计划任务添加了一个新触发器。因此,当我查看任务计划程序UI时,它现在会定义多个触发器。所以我添加了行trigger.Remove(1) - 集合从1开始计数而不是0。

 ITaskDefinition newTask = oldTask.Definition;
 ITriggerCollection triggers = newTask.Triggers;
 IWeeklyTrigger trigger =(IWeeklyTrigger)triggers.Create(_TASK_TRIGGER_TYPE2.TASK_TRIGGER_WEEKLY);            
        trigger.Enabled = true;
        trigger.StartBoundary = DateTime.Now.AddDays(1).Date.ToString("yyyy-MM-dd") + "T" + ts.ToString();

        if (freq == enumFrequency.Daily)
            trigger.DaysOfWeek = 2 | 4 | 8 | 16 | 32;                                   // 2 monday, 4 tuesday, 8 wednesday etc
        else
            trigger.DaysOfWeek = 2;

        trigger.WeeksInterval = 1;                        
            trigger.ExecutionTimeLimit = triggers[0].ExecutionTimeLimit;
        triggers.Remove(1);         // for some unknow reason the first item in the collection is 1 not zero

        _rootFolder.RegisterTaskDefinition(oldTask.Name, newTask, (int)_TASK_CREATION.TASK_UPDATE, null, null, _TASK_LOGON_TYPE.TASK_LOGON_INTERACTIVE_TOKEN, null);

0 个答案:

没有答案