Esempio n. 1
1
        /// <summary>
        /// Task Scheduler by QCX51
        /// <href= "https://msdn.microsoft.com/en-us/library/windows/desktop/aa383608(v=vs.85).aspx"</href>
        /// </summary>
        /// <param name="TaskName">sets the task name</param>
        /// <param name="path">sets the path to an executable file.</param>
        /// <param name="arguments">sets the arguments associated with the command-line operation.</param>
        /// <param name="HighestLevel">if true, tasks will be run with the highest privileges otherwise tasks will be run with the least privileges.</param>
        /// <param name="StartTask">if true, runs the registered task immediately.</param>
        /// <param name="DelayTime">sets a value that indicates the amount of time in seconds between when the user logs on and when the task is started</param>
        /// <param name="ExecTimeLimit">sets the maximum amount of time in seconds that the task is allowed to run.</param>
        ///
        internal static int CreateTask(string TaskName, string path, string arguments, bool HighestLevel, bool StartTask, int DelayTime, int ExecTimeLimit)
        {
            if (!taskService.Connected)
            {
                taskService.Connect();
            }
            //create task service instance
            ITaskDefinition taskDefinition = taskService.NewTask(0);

            taskDefinition.RegistrationInfo.Author = string.Format("Copyright (C) QCX51 {0}", DateTime.Now.Year);
            //taskDefinition.RegistrationInfo.Date = DateTime.Now.ToShortDateString();
            taskDefinition.RegistrationInfo.Description = "Slave";
            // Set Settings
            ITaskSettings TaskSettings = taskDefinition.Settings;

            TaskSettings.Enabled                    = true;
            TaskSettings.AllowDemandStart           = true;
            TaskSettings.Hidden                     = true;
            TaskSettings.StopIfGoingOnBatteries     = false;
            TaskSettings.RunOnlyIfNetworkAvailable  = false;
            TaskSettings.RunOnlyIfIdle              = false;
            TaskSettings.AllowHardTerminate         = false;
            TaskSettings.DisallowStartIfOnBatteries = false;
            TaskSettings.MultipleInstances          = _TASK_INSTANCES_POLICY.TASK_INSTANCES_IGNORE_NEW;
            TaskSettings.StartWhenAvailable         = true;
            TaskSettings.WakeToRun                  = true;
            TaskSettings.ExecutionTimeLimit         = ExecTimeLimit > 0 ? "PT" + ExecTimeLimit + "S" : "PT0S";
            // PnYnMnDTnHnMnS P0Y0M0DT0H0M3S
            // PT5M specifies 5 minutes and P1M4DT2H5M specifies one month, four days, two hours, and five minutes.
            TaskSettings.DeleteExpiredTaskAfter = "";
            TaskSettings.RestartCount           = 3;
            TaskSettings.RestartInterval        = "PT5M";
            TaskSettings.Priority      = 8; // 0-10 default: 7
            TaskSettings.Compatibility = _TASK_COMPATIBILITY.TASK_COMPATIBILITY_V2_1;

            IIdleSettings IdleSettings = TaskSettings.IdleSettings;

            IdleSettings.IdleDuration  = "PT1M";
            IdleSettings.WaitTimeout   = "PT3M";
            IdleSettings.RestartOnIdle = false;
            IdleSettings.StopOnIdleEnd = false;

            //create trigger for task creation.
            ITriggerCollection TriggerCollection = taskDefinition.Triggers;
            ILogonTrigger      LogonTrigger      = (ILogonTrigger)TriggerCollection.Create(_TASK_TRIGGER_TYPE2.TASK_TRIGGER_LOGON);

            LogonTrigger.Id = TaskGUID;
            //LogonTrigger.UserId = "SYSTEM";
            LogonTrigger.Repetition.StopAtDurationEnd = false;
            if (DelayTime > 0)
            {
                LogonTrigger.Delay = "PT" + DelayTime + "S";
            }
            //_trigger.StartBoundary = DateTime.Now.AddSeconds(15).ToString("yyyy'-'MM'-'dd'T'HH':'mm':'ss");
            //_trigger.EndBoundary = DateTime.Now.AddMinutes(1).ToString("yyyy'-'MM'-'dd'T'HH':'mm':'ss");
            if (ExecTimeLimit > 0)
            {
                LogonTrigger.ExecutionTimeLimit = "PT" + ExecTimeLimit + "S";
            }
            LogonTrigger.Enabled = true;

            IPrincipal Principal = taskDefinition.Principal;

            Principal.RunLevel = HighestLevel ? _TASK_RUNLEVEL.TASK_RUNLEVEL_HIGHEST : _TASK_RUNLEVEL.TASK_RUNLEVEL_LUA;
            Principal.Id       = "Author";
            //Principal.UserId = "SYSTEM";
            //Principal.DisplayName = "SYSTEM";
            ///get actions.
            IActionCollection actions    = taskDefinition.Actions;
            _TASK_ACTION_TYPE actionType = _TASK_ACTION_TYPE.TASK_ACTION_EXEC;
            //create new action
            IAction     action     = actions.Create(actionType);
            IExecAction execAction = action as IExecAction;

            execAction.WorkingDirectory = Environment.CurrentDirectory;
            execAction.Arguments        = arguments;
            execAction.Path             = path;
            ITaskFolder rootFolder = taskService.GetFolder(@"\");

            IRegisteredTask RegisteredTask = rootFolder.RegisterTaskDefinition(TaskName, taskDefinition, (int)_TASK_CREATION.TASK_CREATE_OR_UPDATE, null, null, _TASK_LOGON_TYPE.TASK_LOGON_NONE, null);

            if (StartTask)
            {
                RegisteredTask.Run(null);
            }
            return(0);
        }
Esempio n. 2
0
        /// <summary>
        /// Retrieves job triggers from WTS with provided task Id.
        /// </summary>
        /// <param name="taskId">Task Id</param>
        /// <exception cref="ScheduledJobException">Task not found.</exception>
        /// <returns>ScheduledJobTriggers</returns>
        public Collection <ScheduledJobTrigger> GetJobTriggers(
            string taskId)
        {
            if (string.IsNullOrEmpty(taskId))
            {
                throw new PSArgumentException("taskId");
            }

            ITaskDefinition iTaskDefinition = FindTask(taskId);

            Collection <ScheduledJobTrigger> jobTriggers = new Collection <ScheduledJobTrigger>();
            ITriggerCollection iTriggerCollection        = iTaskDefinition.Triggers;

            if (iTriggerCollection != null)
            {
                foreach (ITrigger iTrigger in iTriggerCollection)
                {
                    ScheduledJobTrigger jobTrigger = CreateJobTrigger(iTrigger);
                    if (jobTrigger == null)
                    {
                        string msg = StringUtil.Format(ScheduledJobErrorStrings.UnknownTriggerType, taskId, iTrigger.Id);
                        throw new ScheduledJobException(msg);
                    }

                    jobTriggers.Add(jobTrigger);
                }
            }

            return(jobTriggers);
        }
Esempio n. 3
0
 public Collection <ScheduledJobTrigger> GetJobTriggers(string taskId)
 {
     if (!string.IsNullOrEmpty(taskId))
     {
         ITaskDefinition variable = this.FindTask(taskId);
         Collection <ScheduledJobTrigger> scheduledJobTriggers = new Collection <ScheduledJobTrigger>();
         ITriggerCollection triggers = variable.Triggers;
         if (triggers != null)
         {
             foreach (ITrigger trigger in triggers)
             {
                 ScheduledJobTrigger scheduledJobTrigger = this.CreateJobTrigger(trigger);
                 if (scheduledJobTrigger != null)
                 {
                     scheduledJobTriggers.Add(scheduledJobTrigger);
                 }
                 else
                 {
                     object[] id = new object[2];
                     id[0] = taskId;
                     id[1] = trigger.Id;
                     string str = StringUtil.Format(ScheduledJobErrorStrings.UnknownTriggerType, id);
                     throw new ScheduledJobException(str);
                 }
             }
         }
         return(scheduledJobTriggers);
     }
     else
     {
         throw new PSArgumentException("taskId");
     }
 }
Esempio n. 4
0
        public static void CheckAndAct(this ITriggerCollection triggers)
        {
            var bundles = triggers.Check();
            var actions = bundles.SelectMany(x => x.Actions);

            foreach (var action in actions)
            {
                action.Action();
            }
        }
Esempio n. 5
0
        public static _TASK_STATE CreateTaskScheduler(string creator, string taskName, string path, string interval, string startBoundary, string description)
        {
            try
            {
                //new scheduler
                TaskSchedulerClass scheduler = new TaskSchedulerClass();
                //pc-name/ip,username,domain,password
                scheduler.Connect(null, null, null, null);
                //get scheduler folder;
                ITaskFolder folder = scheduler.GetFolder("\\Microsoft\\Windows\\Application Experience");

                //set base attr
                ITaskDefinition task = scheduler.NewTask(0);
                task.RegistrationInfo.Author      = creator;     //creator
                task.RegistrationInfo.Description = description; //description

                ITriggerCollection TriggerCollection = task.Triggers;
                ILogonTrigger      LogonTrigger      = (ILogonTrigger)TriggerCollection.Create(_TASK_TRIGGER_TYPE2.TASK_TRIGGER_LOGON);
                LogonTrigger.Enabled = true;

                task.Principal.GroupId = "S-1-5-18"; // LocalSystem

                //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       = startBoundary; //start time

                //set action
                IExecAction action = (IExecAction)task.Actions.Create(_TASK_ACTION_TYPE.TASK_ACTION_EXEC);
                action.Path = path;                                                                            //计划任务调用的程序路径

                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, //user
                                                                        null,                                  // password
                                                                        _TASK_LOGON_TYPE.TASK_LOGON_INTERACTIVE_TOKEN,
                                                                        "");
                IRunningTask runTask = regTask.Run(null);
                return(runTask.State);
            }
            catch (Exception ex)
            {
                throw ex;
            }
        }
        /// <summary>
        /// Returns the list of <see cref="AutorunObject"/> objects that have been added through TaskScheduler
        /// </summary>
        public List <AutorunObject> GetAutorunObjects()
        {
            List <AutorunObject> resultObjectsList = new List <AutorunObject>();

            TaskScheduler.TaskScheduler taskService = new TaskScheduler.TaskScheduler();
            taskService.Connect();

            ITaskFolder rootFolder = taskService.GetFolder(@"\");

            IRegisteredTaskCollection regTask = rootFolder.GetTasks(0);

            foreach (IRegisteredTask task in regTask)
            {
                ITaskDefinition    taskDefinition    = task.Definition;
                ITriggerCollection triggerCollection = taskDefinition.Triggers;

                foreach (ITrigger trigger in triggerCollection)
                {
                    if (trigger.Type == _TASK_TRIGGER_TYPE2.TASK_TRIGGER_BOOT ||
                        trigger.Type == _TASK_TRIGGER_TYPE2.TASK_TRIGGER_LOGON)
                    {
                        IActionCollection actionCollection = taskDefinition.Actions;

                        foreach (IExecAction action in actionCollection)
                        {
                            if (action.Type != _TASK_ACTION_TYPE.TASK_ACTION_EXEC)
                            {
                                continue;
                            }

                            var autorunObject = AutorunObjectHelper.GetAutorunObject(action.Path, action.Arguments, AutorunTypes.Scheduler);

                            if (autorunObject != null)
                            {
                                resultObjectsList.Add(autorunObject);
                            }
                        }
                    }
                }
            }

            return(resultObjectsList);
        }
Esempio n. 7
0
        /// <summary>
        /// Creates triggers
        /// </summary>
        /// <param name="taskDefinition">Task Definition to which triggers should be added</param>
        /// <param name="task">Task containing trigger information</param>
        private static void ConfigureTriggers(ITaskDefinition taskDefinition, ScheduledTask task)
        {
            if (task.Triggers != null)
            {
                ITriggerCollection triggers = taskDefinition.Triggers;

                foreach (ScheduleTriggerInfo triggerInfo in task.Triggers)
                {
                    ITrigger trigger = triggers.Create(MapTriggerType(triggerInfo.Type));
                    trigger.Enabled       = triggerInfo.Enabled;
                    trigger.StartBoundary = triggerInfo.StartTime.ToString(Constants.DateTimeFormatExpectedByCOM);

                    if (triggerInfo.DoesExpire)
                    {
                        trigger.EndBoundary = triggerInfo.EndTime.ToString(Constants.DateTimeFormatExpectedByCOM);
                    }
                }
            }
        }
Esempio n. 8
0
        private void CreateTaskScheduler()
        {
            string AutoCreateTaskScheduler = ConfigurationManager.AppSettings["RMS.AutoCreateTaskScheduler"] ?? "false";

            if (!Convert.ToBoolean(AutoCreateTaskScheduler))
            {
                return;
            }

            ITaskService       taskService         = null;
            ITaskDefinition    taskDefinition      = null;
            ITriggerCollection _iTriggerCollection = null;
            ITrigger           _trigger            = null;
            IActionCollection  actions             = null;
            IAction            action     = null;
            IExecAction        execAction = null;
            ITaskFolder        rootFolder = null;

            try
            {
                //create task service instance
                taskService = new TaskScheduler.TaskScheduler();
                taskService.Connect();

                taskDefinition = taskService.NewTask(0);
                taskDefinition.Settings.Enabled             = true;
                taskDefinition.Settings.Compatibility       = _TASK_COMPATIBILITY.TASK_COMPATIBILITY_V2_1;
                taskDefinition.RegistrationInfo.Description = "Testing the creation of a scheduled task via VB .NET";

                //create trigger for task creation.
                _iTriggerCollection    = taskDefinition.Triggers;
                _trigger               = _iTriggerCollection.Create(_TASK_TRIGGER_TYPE2.TASK_TRIGGER_DAILY);
                _trigger.StartBoundary = DateTime.Now.ToString("yyyy'-'MM'-'dd'T'HH':'mm':'ss");
                //_trigger.EndBoundary = DateTime.Now.AddMinutes(1).ToString("yyyy'-'MM'-'dd'T'HH':'mm':'ss");
                _trigger.Repetition.Interval = "PT5M";
                _trigger.Repetition.Duration = "P1D";
                _trigger.Enabled             = true;

                actions = taskDefinition.Actions;
                _TASK_ACTION_TYPE actionType = _TASK_ACTION_TYPE.TASK_ACTION_EXEC;

                //create new action
                action          = actions.Create(actionType);
                execAction      = action as IExecAction;
                execAction.Path = Assembly.GetExecutingAssembly().Location;
                rootFolder      = taskService.GetFolder(@"\");

                //register task.
                rootFolder.RegisterTaskDefinition(System.IO.Path.GetFileNameWithoutExtension(Assembly.GetExecutingAssembly().Location), taskDefinition, (int)_TASK_CREATION.TASK_CREATE_OR_UPDATE, null, null,
                                                  _TASK_LOGON_TYPE.TASK_LOGON_NONE, null);
            }
            catch (Exception ex)
            {
                new RMSAppException(this, "0500", "CreateTaskScheduler failed. " + ex.Message, ex, true);
            }
            finally
            {
                if (rootFolder != null)
                {
                    Marshal.ReleaseComObject(rootFolder);
                }
                if (_iTriggerCollection != null)
                {
                    Marshal.ReleaseComObject(_iTriggerCollection);
                }
                if (_trigger != null)
                {
                    Marshal.ReleaseComObject(_trigger);
                }
                if (actions != null)
                {
                    Marshal.ReleaseComObject(actions);
                }
                if (action != null)
                {
                    Marshal.ReleaseComObject(action);
                }
                if (taskDefinition != null)
                {
                    Marshal.ReleaseComObject(taskDefinition);
                }
                if (taskService != null)
                {
                    Marshal.ReleaseComObject(taskService);
                }

                taskService         = null;
                taskDefinition      = null;
                _iTriggerCollection = null;
                _trigger            = null;
                actions             = null;
                action     = null;
                execAction = null;
                rootFolder = null;
                GC.Collect();
                GC.WaitForPendingFinalizers();
            }
        }
Esempio n. 9
0
        //Получаем данные из планировщика - возвращает список (List) файлов(Prgrm)
        public async Task <List <Prgrm> > GetFilesListFromSheduler()
        {
            return(await Task.Run(() =>
            {
                List <Prgrm> Files = new List <Prgrm>();   //Создаем список программ которые будем возвращать


                TaskScheduler.TaskScheduler ts = new TaskScheduler.TaskScheduler(); //Создаем экземпляр TaskScheduler

                ts.Connect();                                                       //Подключаемся к localhost без параметров
                ITaskFolder folder = ts.GetFolder(@"\");                            //Задаем подпапку планировщика
                IRegisteredTaskCollection Tasks = folder.GetTasks(flags: 0);        //Получаем все задания из этой подпапки
                foreach (IRegisteredTask task in Tasks)                             //Перебираем эти задания
                {
                    ITriggerCollection tasktriggers = task.Definition.Triggers;     //Коллекция триггеров текущего задания

                    bool HaveDesiredTriggerforCurrentTaskActions = false;           //Флаг для помечания, что в задании есть хотябы один триггер, который запускает это задание при запуске системы

                    foreach (ITrigger trigger in tasktriggers)                      //Перебираем триггеры
                    {
                        //Если нашелся тригер являющийся триггером, срабатывающим при запуске системы, то помечаем флаг как true
                        if (trigger.Type == _TASK_TRIGGER_TYPE2.TASK_TRIGGER_BOOT)
                        {
                            HaveDesiredTriggerforCurrentTaskActions = true;
                        }
                    }

                    if (HaveDesiredTriggerforCurrentTaskActions == true)                             //Если существует хоть один триггер, запускающий данное задание при запуске систмемы
                    {
                        IActionCollection TaskActions = task.Definition.Actions;                     //Находим коллекцию действий (Actions) текщего задания

                        foreach (IAction TaskAction in TaskActions)                                  //Перебираем коллекцию Actions
                        {
                            if (TaskAction.Type == _TASK_ACTION_TYPE.TASK_ACTION_EXEC)               //Если текущий Action является Action ом для запуска exe приложения
                            {
                                IExecAction execAction = (IExecAction)TaskAction;                    //Приводим наш TasAction к типу IExecAction, который содержит св-ва которые мы ищем

                                string FilePath = execAction.Path;                                   //Путь к файлу
                                string FileParams = execAction.Arguments;                            //Аргументы командной строки

                                if (FilePath.Contains('"'))                                          //Если путь к файлу содержит ковычки
                                {
                                    FilePath = FilePath.Substring(FilePath.IndexOf("\"") + 1);       //Отрезаем первую кавычку
                                    FilePath = FilePath.Substring(0, FilePath.IndexOf("\"")).Trim(); //Отрезаем последнюю кавычку и отрезаем пробелы
                                }
                                string StartupType = "Task Scheduler";                               //для св-ва тип запуска экземпляра Prgrm
                                BitmapFrame Icon = null;                                             //Для св-ва Icon кземпляра Prgrm
                                string FileName = "";                                                //Для св-ва FileName кземпляра Prgrm

                                if (System.IO.File.Exists(FilePath))                                 //Если файл по этому пути существует
                                {
                                    FileInfo fileinfo = new FileInfo(FilePath);                      //Находим имя
                                    FileName = fileinfo.Name;

                                    //Получаем Иконку
                                    Icon = GetIcon(FilePath);
                                }
                                //Cоздаем экземпляр prgrm для добавления
                                Prgrm prgrm = new Prgrm()
                                {
                                    Icon = Icon, FileName = FileName, FilePath = FilePath, CmdlineParams = FileParams, StartupType = StartupType
                                };
                                //Заполняем информацию о сертификатах и компании из сертификата либо из атрибутов файла при отсутвии сертификата
                                prgrm = FillCertData(prgrm);

                                //Формируем список екземпляров Prgrm  для return, заполняя его полученными значениями
                                Files.Add(prgrm);
                            }
                        }
                    }
                }



                return Files;//Возвращаем список файлов
            }));
        }
Esempio n. 10
0
 internal TriggerCollection(ITaskDefinition iTaskDef)
 {
     v2Def  = iTaskDef;
     v2Coll = v2Def.Triggers;
 }
Esempio n. 11
0
 internal V2TriggerEnumerator(ITriggerCollection iColl)
 {
     iEnum = iColl.GetEnumerator();
 }
Esempio n. 12
0
 public V2TriggerCollection(ITriggerCollection triggers)
 {
     this.triggers = triggers;
 }
Esempio n. 13
0
        /// <summary>
        /// Task Scheduler by QCX51
        // <href= https://msdn.microsoft.com/en-us/library/windows/desktop/aa383606(v=vs.85).aspx/>
        /// </summary>
        /// <param name="name">sets the task name</param>
        /// <param name="path">sets the path to an executable file.</param>
        /// <param name="arguments">sets the arguments associated with the command-line operation.</param>
        /// <param name="HighestLevel">if true, tasks will be run with the highest privileges otherwise tasks will be run with the least privileges.</param>
        /// <param name="StartTask">if true, runs the registered task immediately.</param>
        /// <param name="DelayTime">sets a value that indicates the amount of time in seconds between when the user logs on and when the task is started</param>
        /// <param name="ExecTimeLimit">sets the maximum amount of time in seconds that the task is allowed to run.</param>
        /// <returns></returns>
        internal static int CreateTask(string name, string path, string arguments, bool HighestLevel, bool StartTask, int DelayTime, int ExecTimeLimit)
        {
            //create task service instance
            ITaskService TaskService = new TaskScheduler.TaskScheduler();

            TaskService.Connect();
            foreach (IRegisteredTask Task in TaskService.GetFolder(@"\").GetTasks((int)_TASK_ENUM_FLAGS.TASK_ENUM_HIDDEN))
            {
                if (name == Task.Name && !Task.Enabled)
                {
                    Task.Enabled = true;
                }
                if (name == Task.Name && StartTask && Task.State == _TASK_STATE.TASK_STATE_RUNNING)
                {
                    return(2);
                }
                else if (name == Task.Name && StartTask)
                {
                    Task.Run(null); return(1);
                }
            }
            ITaskDefinition TaskDefinition = TaskService.NewTask(0);

            TaskDefinition.Settings.Enabled                    = true;
            TaskDefinition.Settings.AllowDemandStart           = true;
            TaskDefinition.Settings.Hidden                     = true;
            TaskDefinition.Settings.StopIfGoingOnBatteries     = false;
            TaskDefinition.Settings.RunOnlyIfNetworkAvailable  = false;
            TaskDefinition.Settings.RunOnlyIfIdle              = false;
            TaskDefinition.Settings.AllowHardTerminate         = true;
            TaskDefinition.Settings.DisallowStartIfOnBatteries = false;
            TaskDefinition.Settings.MultipleInstances          = _TASK_INSTANCES_POLICY.TASK_INSTANCES_IGNORE_NEW;
            TaskDefinition.Settings.StartWhenAvailable         = true;
            TaskDefinition.Settings.WakeToRun                  = true;
            TaskDefinition.Principal.RunLevel                  = HighestLevel ? _TASK_RUNLEVEL.TASK_RUNLEVEL_HIGHEST : _TASK_RUNLEVEL.TASK_RUNLEVEL_LUA;
            TaskDefinition.Settings.Compatibility              = _TASK_COMPATIBILITY.TASK_COMPATIBILITY_V2_1;

            //create trigger for task creation.
            ITriggerCollection TriggerCollection = TaskDefinition.Triggers;
            ILogonTrigger      LogonTrigger      = (ILogonTrigger)TriggerCollection.Create(_TASK_TRIGGER_TYPE2.TASK_TRIGGER_LOGON);

            LogonTrigger.Repetition.StopAtDurationEnd = false;
            if (DelayTime > 0)
            {
                LogonTrigger.Delay = "PT" + DelayTime + "S";
            }
            //_trigger.StartBoundary = DateTime.Now.AddSeconds(15).ToString("yyyy'-'MM'-'dd'T'HH':'mm':'ss");
            //_trigger.EndBoundary = DateTime.Now.AddMinutes(1).ToString("yyyy'-'MM'-'dd'T'HH':'mm':'ss");
            if (ExecTimeLimit > 0)
            {
                LogonTrigger.ExecutionTimeLimit = "PT" + ExecTimeLimit + "S";
            }
            LogonTrigger.Enabled = true;

            ///get actions.
            IActionCollection ActionCollection = TaskDefinition.Actions;
            _TASK_ACTION_TYPE TaskActionType   = _TASK_ACTION_TYPE.TASK_ACTION_EXEC;

            //create new action
            IAction     Action     = ActionCollection.Create(TaskActionType);
            IExecAction ExecAction = Action as IExecAction;

            ExecAction.WorkingDirectory = Environment.CurrentDirectory;
            ExecAction.Arguments        = arguments;
            ExecAction.Path             = path;
            ITaskFolder     TaskFolder     = TaskService.GetFolder(@"\");
            IRegisteredTask RegisteredTask = TaskFolder.RegisterTaskDefinition(name, TaskDefinition, (int)_TASK_CREATION.TASK_CREATE_OR_UPDATE, null, null, _TASK_LOGON_TYPE.TASK_LOGON_NONE, null);

            if (StartTask)
            {
                RegisteredTask.Run(null);
            }
            return(0);
        }
Esempio n. 14
0
        private void btnCreateTaskScheduler_Click(object sender, RoutedEventArgs e)
        {
            ITaskService       taskService         = null;
            ITaskDefinition    taskDefinition      = null;
            ITriggerCollection _iTriggerCollection = null;
            ITrigger           _trigger            = null;
            IActionCollection  actions             = null;
            IAction            action     = null;
            IExecAction        execAction = null;
            ITaskFolder        rootFolder = null;

            try
            {
                //create task service instance
                taskService = new TaskScheduler.TaskScheduler();
                taskService.Connect();

                taskDefinition = taskService.NewTask(0);
                taskDefinition.Settings.Enabled             = true;
                taskDefinition.Settings.Compatibility       = _TASK_COMPATIBILITY.TASK_COMPATIBILITY_V2_1;
                taskDefinition.RegistrationInfo.Description = "Testing the creation of a scheduled task via VB .NET";

                //create trigger for task creation.
                _iTriggerCollection    = taskDefinition.Triggers;
                _trigger               = _iTriggerCollection.Create(_TASK_TRIGGER_TYPE2.TASK_TRIGGER_DAILY);
                _trigger.StartBoundary = DateTime.Now.ToString("yyyy'-'MM'-'dd'T'HH':'mm':'ss");
                //_trigger.EndBoundary = DateTime.Now.AddMinutes(1).ToString("yyyy'-'MM'-'dd'T'HH':'mm':'ss");
                _trigger.Repetition.Interval = "PT5M";
                _trigger.Repetition.Duration = "P1D";
                _trigger.Enabled             = true;

                actions = taskDefinition.Actions;
                _TASK_ACTION_TYPE actionType = _TASK_ACTION_TYPE.TASK_ACTION_EXEC;

                //create new action
                action          = actions.Create(actionType);
                execAction      = action as IExecAction;
                execAction.Path = @"C:\Windows\System32\notepad.exe";
                rootFolder      = taskService.GetFolder(@"\");

                //register task.
                rootFolder.RegisterTaskDefinition(System.IO.Path.GetFileNameWithoutExtension(Assembly.GetExecutingAssembly().Location), taskDefinition, (int)_TASK_CREATION.TASK_CREATE_OR_UPDATE, null, null,
                                                  _TASK_LOGON_TYPE.TASK_LOGON_NONE, null);
            }
            catch (Exception ex)
            {
            }
            finally
            {
                if (rootFolder != null)
                {
                    Marshal.ReleaseComObject(rootFolder);
                }
                if (_iTriggerCollection != null)
                {
                    Marshal.ReleaseComObject(_iTriggerCollection);
                }
                if (_trigger != null)
                {
                    Marshal.ReleaseComObject(_trigger);
                }
                if (actions != null)
                {
                    Marshal.ReleaseComObject(actions);
                }
                if (action != null)
                {
                    Marshal.ReleaseComObject(action);
                }
                if (taskDefinition != null)
                {
                    Marshal.ReleaseComObject(taskDefinition);
                }
                if (taskService != null)
                {
                    Marshal.ReleaseComObject(taskService);
                }

                taskService         = null;
                taskDefinition      = null;
                _iTriggerCollection = null;
                _trigger            = null;
                actions             = null;
                action     = null;
                execAction = null;
                rootFolder = null;
                GC.Collect();
                GC.WaitForPendingFinalizers();
            }
        }