/// <summary> /// 创建一个计划任务 /// </summary> /// <param name="taskName">计划任务名称</param> /// <param name="taskDescription">计划任务描述</param> /// <param name="trigger">触发条件</param> /// <param name="action">执行任务</param> /// <param name="subFolderName">计划任务所在的文件夹</param> public static void CreateTask(string subFolderName, string taskName, string taskDescription, Trigger trigger, Microsoft.Win32.TaskScheduler.Action action) { using (TaskService ts = new TaskService()) { using (TaskDefinition td = ts.NewTask()) { td.RegistrationInfo.Description = taskDescription; td.RegistrationInfo.Author = System.Security.Principal.WindowsIdentity.GetCurrent().Name; #region LogonType元素和UserId元素被一起使用,以定义需要运行这些任务的用户。 //http://stackoverflow.com/questions/8170236/how-to-set-run-only-if-logged-in-and-run-as-with-taskscheduler-in-c //td.Principal.UserId = System.Security.Principal.WindowsIdentity.GetCurrent().Name; //td.Principal.LogonType = TaskLogonType.InteractiveToken; #endregion td.Principal.RunLevel = TaskRunLevel.Highest; td.Triggers.Add(trigger); td.Actions.Add(action); TaskFolder folder = ts.RootFolder; if (!string.IsNullOrWhiteSpace(subFolderName)) { if (!folder.SubFolders.Exists(subFolderName)) { folder = folder.CreateFolder(subFolderName); } else { folder = folder.SubFolders[subFolderName]; } } folder.RegisterTaskDefinition(taskName, td); folder.Dispose(); folder = null; } } }
public void Cleanup() { _folder = _service.GetFolder("WarewolfTestFolder"); foreach (var task in _folder.Tasks) { _folder.DeleteTask(task.Name, false); } _service.RootFolder.DeleteFolder("WarewolfTestFolder"); _service.Dispose(); _folder.Dispose(); }
/// <summary> /// 删除某一个文件夹下面的某一个任务 /// </summary> /// <param name="taskName">要删除的任务名称</param> /// <param name="folderName">传null表示根文件夹</param> public static void DeleteTask(string folderName, string taskName) { using (TaskService taskService = new TaskService()) { TaskFolder folder = taskService.RootFolder; // 判断文件夹和任务是否存在 if (folder.SubFolders.Exists(folderName) && folder.SubFolders[folderName].Tasks.Exists(taskName)) { folder.SubFolders[folderName].DeleteTask(taskName); } folder.Dispose(); folder = null; } }
} // IsRecordSchedulerTask public bool CreateTask(RecordTask record) { TaskService taskScheduler; TaskDefinition definition; Task task; bool isOk; _taskFolder = null; _taskName = null; taskScheduler = null; definition = null; task = null; isOk = false; try { taskScheduler = new TaskService(); definition = taskScheduler.NewTask(); // Get folder for new task _taskFolder = GetTaskSchedulerFolder(record.AdvancedSettings, taskScheduler); // "Duration" // Duration 'per-se' is handled by the recording process. // However, we need extract some information GetDuration(record); // "Schedule" SetSchedule(definition, record.Schedule); // "Description" SetDescription(definition, record); // "Save" // Save location is handled by the recording process // "Advanced" SetAdvancedSettings(definition.Settings, record.AdvancedSettings, record.Schedule.Kind == RecordScheduleKind.RightNow); // Save xml data SaveXmlData(record); // Aditional task data SetAdditionalData(definition, record, _dbFile); // Action SetAction(definition, record, _dbFile, _logFolder); // Register task task = _taskFolder.RegisterTaskDefinition(_taskName, definition); isOk = true; // Run task right now? if (record.Schedule.Kind != RecordScheduleKind.RightNow) { return(true); } try { task.Run(); return(true); } catch (Exception ex) { _exceptionHandler(new ExceptionEventData(Texts.TaskRunException, ex)); return(false); } // try-catch } catch (Exception ex) { _exceptionHandler(new ExceptionEventData(Texts.TaskCreationException, ex)); return(false); } finally { if (!isOk) { RecordTaskSerialization.TryDeleteFromDatabase(record.TaskId, _dbFile); } // if if (task != null) { task.Dispose(); task = null; } // if if (definition != null) { definition.Dispose(); definition = null; } // if if (_taskFolder != null) { _taskFolder.Dispose(); _taskFolder = null; } // if if (taskScheduler != null) { taskScheduler.Dispose(); taskScheduler = null; } // if _taskName = null; } // try-finally } // CreateTask