public void ScheduledTaskSpecificationConstructor_WhenEverythinkIsOk_AllPropertiesHavaCorrectValues() { // Arrange string name = "name"; string exeAbsolutePath = "c:\\"; int scheduledHour = 4; int scheduledMinute = 5; int executionTimeLimitInMinutes = 6; // Act var scheduledTaskSpecification = new ScheduledTaskSpecification(name, exeAbsolutePath, scheduledHour, scheduledMinute, executionTimeLimitInMinutes); // Assert Assert.AreEqual(name, scheduledTaskSpecification.Name); Assert.AreEqual(exeAbsolutePath, scheduledTaskSpecification.ExeAbsolutePath); Assert.AreEqual(scheduledHour, scheduledTaskSpecification.ScheduledHour); Assert.AreEqual(scheduledMinute, scheduledTaskSpecification.ScheduledMinute); Assert.AreEqual(executionTimeLimitInMinutes, scheduledTaskSpecification.ExecutionTimeLimitInMinutes); }
private static DailyTrigger CreateTaskTrigger(ScheduledTaskSpecification scheduledTaskSpecification) { DateTime now = DateTime.Now; var dailyTrigger = new DailyTrigger { DaysInterval = 1, StartBoundary = new DateTime( now.Year, now.Month, now.Day, scheduledTaskSpecification.ScheduledHour, scheduledTaskSpecification.ScheduledMinute, 0), }; if (scheduledTaskSpecification.ExecutionTimeLimitInMinutes > 0) { dailyTrigger.ExecutionTimeLimit = TimeSpan.FromMinutes(scheduledTaskSpecification.ExecutionTimeLimitInMinutes); } if (scheduledTaskSpecification.RepetitionSpecification.Enabled) { RepetitionSpecification repetitionSpecification = scheduledTaskSpecification.RepetitionSpecification; RepetitionPattern repetitionPattern = dailyTrigger.Repetition; repetitionPattern.Duration = repetitionSpecification.Duration; repetitionPattern.Interval = repetitionSpecification.Interval; repetitionPattern.StopAtDurationEnd = repetitionSpecification.StopAtDurationEnd; } return(dailyTrigger); }
protected override void DoExecute() { var scheduledTaskSpecification = new ScheduledTaskSpecification( _schedulerTaskName, _executablePath, _scheduledHour, _scheduledMinute, _executionTimeLimitInMinutes, Converter.CreateRepetitionSpecification(_repetition)); _taskScheduler.UpdateTaskSchedule( _machineName, scheduledTaskSpecification, _userName, _password); }
protected override void DoExecute() { string taskName = _schedulerAppProjectInfo.SchedulerAppName; int scheduledHour = _schedulerAppProjectInfo.ScheduledHour; int scheduledMinute = _schedulerAppProjectInfo.ScheduledMinute; int executionTimeLimitInMinutes = _schedulerAppProjectInfo.ExecutionTimeLimitInMinutes; var scheduledTaskSpecification = new ScheduledTaskSpecification( taskName, _executablePath, scheduledHour, scheduledMinute, executionTimeLimitInMinutes); _taskScheduler.UpdateTaskSchedule( _machineName, scheduledTaskSpecification, _userName, _password); }
public void ScheduleNewTask(string machineName, ScheduledTaskSpecification scheduledTaskSpecification, string userName, string password) { Guard.NotNullNorEmpty(machineName, "machineName"); Guard.NotNull(scheduledTaskSpecification, "scheduledTaskSpecification"); Guard.NotNullNorEmpty(userName, "userName"); Guard.NotNullNorEmpty(password, "password"); using (var taskService = CreateTaskService(machineName)) { Task task = taskService.FindTask(scheduledTaskSpecification.Name, false); if (task != null) { task.Dispose(); throw new InvalidOperationException(string.Format("Couldn't schedule new task because a task with the same name ('{0}') has already been scheduled.", scheduledTaskSpecification.Name)); } Action taskAction = new ExecAction(scheduledTaskSpecification.ExeAbsolutePath) { WorkingDirectory = Path.GetDirectoryName(scheduledTaskSpecification.ExeAbsolutePath), }; DailyTrigger taskTrigger = CreateTaskTrigger(scheduledTaskSpecification); TaskDefinition taskDefinition = null; Task registeredTask = null; try { taskDefinition = taskService.NewTask(); taskDefinition.Settings.AllowDemandStart = true; taskDefinition.Settings.AllowHardTerminate = true; taskDefinition.Settings.DisallowStartIfOnBatteries = false; taskDefinition.Settings.DisallowStartOnRemoteAppSession = false; taskDefinition.Settings.RunOnlyIfIdle = false; taskDefinition.Settings.RunOnlyIfNetworkAvailable = false; taskDefinition.Settings.StartWhenAvailable = true; taskDefinition.Settings.StopIfGoingOnBatteries = false; taskDefinition.RegistrationInfo.Source = _TaskRegistrationInfoSource; taskDefinition.Actions.Add(taskAction); taskDefinition.Triggers.Add(taskTrigger); registeredTask = taskService.RootFolder.RegisterTaskDefinition( scheduledTaskSpecification.Name, taskDefinition, TaskCreation.Create, userName, password, TaskLogonType.Password); } finally { if (taskDefinition != null) { taskDefinition.Dispose(); } if (registeredTask != null) { registeredTask.Dispose(); } } } }
private static DailyTrigger CreateTaskTrigger(ScheduledTaskSpecification scheduledTaskSpecification) { DateTime now = DateTime.Now; var dailyTrigger = new DailyTrigger { DaysInterval = 1, StartBoundary = new DateTime( now.Year, now.Month, now.Day, scheduledTaskSpecification.ScheduledHour, scheduledTaskSpecification.ScheduledMinute, 0), }; if (scheduledTaskSpecification.ExecutionTimeLimitInMinutes > 0) { dailyTrigger.ExecutionTimeLimit = TimeSpan.FromMinutes(scheduledTaskSpecification.ExecutionTimeLimitInMinutes); } if (scheduledTaskSpecification.RepetitionSpecification.Enabled) { RepetitionSpecification repetitionSpecification = scheduledTaskSpecification.RepetitionSpecification; RepetitionPattern repetitionPattern = dailyTrigger.Repetition; repetitionPattern.Duration = repetitionSpecification.Duration; repetitionPattern.Interval = repetitionSpecification.Interval; repetitionPattern.StopAtDurationEnd = repetitionSpecification.StopAtDurationEnd; } return dailyTrigger; }
// TODO IMM HI: can we do this without user name and password? public void UpdateTaskSchedule(string machineName, ScheduledTaskSpecification scheduledTaskSpecification, string userName, string password) { if (string.IsNullOrEmpty(machineName)) { throw new ArgumentException("Argument can't be null nor empty.", "machineName"); } if (scheduledTaskSpecification == null) { throw new ArgumentNullException("scheduledTaskSpecification"); } string taskName = scheduledTaskSpecification.Name; using (var taskService = CreateTaskService(machineName)) { Task task = null; Task registeredTask = null; TaskDefinition taskDefinition = null; try { task = taskService.FindTask(taskName, false); if (task == null) { throw new InvalidOperationException(string.Format("Task named '{0}' doesn't exist on the target machine ('{1}').", taskName, machineName)); } taskDefinition = task.Definition; taskDefinition.Triggers.Clear(); Trigger taskTrigger = CreateTaskTrigger(scheduledTaskSpecification); taskDefinition.Triggers.Add(taskTrigger); registeredTask = taskService.RootFolder.RegisterTaskDefinition( scheduledTaskSpecification.Name, taskDefinition, TaskCreation.Update, userName, password, TaskLogonType.Password); } finally { if (taskDefinition != null) { taskDefinition.Dispose(); } if (task != null) { task.Dispose(); } if (registeredTask != null) { registeredTask.Dispose(); } } } }
private static DailyTrigger CreateDailyTrigger(ScheduledTaskSpecification scheduledTaskSpecification) { DateTime now = DateTime.Now; var dailyTrigger = new DailyTrigger { DaysInterval = 1, StartBoundary = new DateTime( now.Year, now.Month, now.Day, scheduledTaskSpecification.ScheduledHour + 1, // TODO IMM HI: remove + 1 scheduledTaskSpecification.ScheduledMinute, 0), }; if (scheduledTaskSpecification.ExecutionTimeLimitInMinutes > 0) { dailyTrigger.ExecutionTimeLimit = TimeSpan.FromMinutes(scheduledTaskSpecification.ExecutionTimeLimitInMinutes); } return dailyTrigger; }