需要先引用Interop.TaskScheduler.dll
public class SchTaskExt {/// <summary> /// delete task /// </summary> /// <param name="taskName"></param> public static void DeleteTask(string taskName) { TaskSchedulerClass ts = new TaskSchedulerClass(); ts.Connect(null, null, null, null); ITaskFolder folder = ts.GetFolder("\\"); folder.DeleteTask(taskName, 0); } /// <summary> /// get all tasks /// </summary> public static IRegisteredTaskCollection GetAllTasks() { TaskSchedulerClass ts = new TaskSchedulerClass(); ts.Connect(null, null, null, null); ITaskFolder folder = ts.GetFolder("\\"); IRegisteredTaskCollection tasks_exists = folder.GetTasks(1); return tasks_exists; } /// <summary> /// check task isexists /// </summary> /// <param name="taskName"></param> /// <returns></returns> public static bool IsExists(string taskName) { var isExists = false; IRegisteredTaskCollection tasks_exists = GetAllTasks(); for (int i = 1; i <= tasks_exists.Count; i++) { IRegisteredTask t = tasks_exists[i]; if (t.Name.Equals(taskName)) { isExists = true; break; } } return isExists; } /// <summary> /// create task /// </summary> /// <param name="creator">创建者</param> /// <param name="taskName">计划任务名称</param> /// <param name="path">路径</param> /// <param name="interval">循环时间</param> /// <param name="parameters">参数(格式:aa bb cc)</param> /// <param name="stateTime">执行开始时间(格式:2015-12-15T00:00:00)</param> public static void CreateTaskScheduler(string creator, string taskName, string path, string interval,string parameters,string stateTime) { try { if (IsExists(taskName)) { DeleteTask(taskName); } //实例化任务对象 TaskSchedulerClass scheduler = new TaskSchedulerClass(); //注:只有Connect之后才能使用 scheduler.Connect(null, null, null, null);//连接 //get scheduler folder ITaskFolder folder = scheduler.GetFolder("\\"); //set base attr ITaskDefinition task = scheduler.NewTask(0); task.RegistrationInfo.Author = creator;//创建者 task.RegistrationInfo.Description = "...";//描述 //set trigger (IDailyTrigger ITimeTrigger) ITimeTrigger tt = (ITimeTrigger)task.Triggers.Create(_TASK_TRIGGER_TYPE2.TASK_TRIGGER_TIME); //tt.Repetition.Interval = interval;//循环时间( format PT1H1M==1小时1分钟 设置的值最终都会转成分钟加入到触发器) tt.StartBoundary = stateTime;//开始执行时间 格式:2015-12-15T00:00:00 //set action IExecAction action = (IExecAction)task.Actions.Create(_TASK_ACTION_TYPE.TASK_ACTION_EXEC); action.Path = path; action.Arguments = parameters; task.Settings.ExecutionTimeLimit = "PT0S"; //运行任务时间超时停止任务吗? PTOS 不开启超时 task.Settings.DisallowStartIfOnBatteries = false;//只有在交流电源下才执行 task.Settings.RunOnlyIfIdle = false;//仅当计算机空闲下才执行 IRegisteredTask regTask = folder.RegisterTaskDefinition(taskName, task, (int)_TASK_CREATION.TASK_CREATE, null, null, _TASK_LOGON_TYPE.TASK_LOGON_INTERACTIVE_TOKEN, ""); IRunningTask runTask = regTask.Run(null); //return runTask.State; } catch (Exception ex) { throw ex; } } }
浙公网安备 33010602011771号