在 Windows 任务计划程序中更改已计划任务的运行时间

本文关键字:计划 任务 运行时间 Windows 程序 | 更新日期: 2023-09-27 18:18:35

我在修改计算机上已经存在的任务时遇到问题。我正在尝试使用从 c# 生成的互操作接口(Interop.TaskScheduler.dll从 system32/taskschd.dll 生成(来执行此操作。

首先,我不能使用像 http://taskscheduler.codeplex.com/这样的其他库。已经测试过,它适用于前面提到的库。现在,当我尝试对生成的接口执行相同的操作时,没有任何变化。基本上我在做什么:

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);

乍一看,它应该可以工作,但是由于某种原因,当我尝试为行运行分配新的日期时间时:

t.StartBoundary = nextRun.ToString(STR_DateTimeFormat.Replace(" ", "T"));

它不起作用。实际上,在该foreach中,它已更改,但是当我尝试调试并创建另一个打印StartBound值的foreach时,它显示了旧值。我做错了什么吗?有机会让它工作吗?:-)谢谢。

在 Windows 任务计划程序中更改已计划任务的运行时间

如果尝试使用任务计划程序 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;
        }

克拉克·博斯

是的。您必须创建具有相同标题和文件夹的新任务定义才能更新现有任务定义。尝试注册它并在任务计划程序中查看任务。它应该已使用新计划更新了任务。但是,历史应该保持不变。