我在修改计算机上的任务时遇到问题。我正在尝试使用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);