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);
        }
예제 #2
0
        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);
        }
예제 #5
0
        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();
              }
            }
              }
        }
예제 #6
0
        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;
        }
예제 #7
0
        // 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();
              }
            }
              }
        }
예제 #8
0
        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;
        }
예제 #9
0
        // 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();
                    }
                }
            }
        }
예제 #10
0
        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();
                    }
                }
            }
        }