我有修改机器上已经存在的任务的问题。 我正在尝试使用C#生成的interop接口(system32 / taskschd.dll生成的Interop.TaskScheduler.dll)来执行此操作。
首先, 我不能使用其他库,如http://taskscheduler.codeplex.com/ 。 已经过testing,它与之前提到的库一起工作。 现在,当我尝试做与生成的接口相同的东西没有改变。 基本上我在做什么:
string STR_DateTimeFormat = "yyyy-MM-dd HH:mm:ss"; string taskName = "taskName", user = "user", pass = "pass"; DateTime nextRun = new DateTime.Now.AddDays(7); TaskSchedulerClass ts = new TaskSchedulerClass(); ts.Connect(null, null, null, null); IRegisteredTask task = ts.GetFolder("\\").GetTask(String.Format("\\{0}",taskName)); foreach (ITrigger t in task.Definition.Triggers) t.StartBoundary = nextRun.ToString(STR_DateTimeFormat.Replace(" ", "T")); ts.GetFolder("\\").RegisterTaskDefinition(task.Path, task.Definition, (int)_TASK_CREATION.TASK_UPDATE, user, pass, _TASK_LOGON_TYPE.TASK_LOGON_PASSWORD, null);
首先看看它应该工作,但由于某种原因,当我尝试分配新的date时间排队运行:
t.StartBoundary = nextRun.ToString(STR_DateTimeFormat.Replace(" ", "T"));
它不起作用。 其实在那个foreach它改变了,但是当我试图debugging和创build另一个打印StartBoundary值的foreach它显示旧值。 我做错了什么吗? 有没有机会让它工作? :-) 谢谢。
如果您尝试使用任务计划程序C#API更新任务,则需要声明新的ITaskDefinition。 如果您尝试更改现有定义,然后重新注册,则不起作用。
IRegisteredTask oldTask = ... ITaskDefinition task = oldTask.Definition; //modifications to oldTask.Definition / task //does **not** work folder.RegisterTaskDefinition(oldTask.Name, oldTask.Definition, ... //does work folder.RegisterTaskDefinition(oldTask.Name, task, ...
回复原来的海报,看问题的评论。 我写了这个答案来澄清这个问题,并提请注意这个问题已经得到解答,因为类似的问题困扰了我几天。
public string ModifyScheduledTaskSchedule(string TaskName, string Date, string Hour, string Minute) { string ReturnedTask = TaskName; TaskScheduler.TaskScheduler ts = new TaskScheduler.TaskScheduler(); ts.Connect(Packagingserver, PkgserverUserName, "DOMAIN", PkgserverPassword); IRegisteredTask task = ts.GetFolder("\\").GetTask(TaskName); ITaskDefinition td = task.Definition; td.Triggers[1].StartBoundary = Date + "T" + Hour + ":" + Minute + ":" + "00"; ts.GetFolder("\\").RegisterTaskDefinition(TaskName, td, (int)_TASK_CREATION.TASK_UPDATE, "DOMAIN\\" + PkgserverUserName, PkgserverPassword, _TASK_LOGON_TYPE.TASK_LOGON_NONE, ""); return ReturnedTask; }
Clark Bohs
是。 您必须创建一个具有相同标题和文件夹的新任务定义才能更新现有的任务。 尝试注册并看到任务计划程序中的任务。 它应该用新的时间表更新任务。 但是,历史应该保持不变。