Пример #1
0
        /// <summary>
        /// Creates a ScheduledJobTrigger object based on a provided WTS ITrigger.
        /// </summary>
        /// <param name="iTrigger">ITrigger</param>
        /// <returns>ScheduledJobTrigger</returns>
        private ScheduledJobTrigger CreateJobTrigger(
            ITrigger iTrigger)
        {
            ScheduledJobTrigger rtnJobTrigger = null;

            if (iTrigger is IBootTrigger)
            {
                IBootTrigger iBootTrigger = (IBootTrigger)iTrigger;
                rtnJobTrigger = ScheduledJobTrigger.CreateAtStartupTrigger(
                    ParseWTSTime(iBootTrigger.Delay),
                    ConvertStringId(iBootTrigger.Id),
                    iBootTrigger.Enabled);
            }
            else if (iTrigger is ILogonTrigger)
            {
                ILogonTrigger iLogonTrigger = (ILogonTrigger)iTrigger;
                rtnJobTrigger = ScheduledJobTrigger.CreateAtLogOnTrigger(
                    iLogonTrigger.UserId,
                    ParseWTSTime(iLogonTrigger.Delay),
                    ConvertStringId(iLogonTrigger.Id),
                    iLogonTrigger.Enabled);
            }
            else if (iTrigger is ITimeTrigger)
            {
                ITimeTrigger iTimeTrigger = (ITimeTrigger)iTrigger;
                TimeSpan     repInterval  = ParseWTSTime(iTimeTrigger.Repetition.Interval);
                TimeSpan     repDuration  = (repInterval != TimeSpan.Zero && iTimeTrigger.Repetition.StopAtDurationEnd == false) ?
                                            TimeSpan.MaxValue : ParseWTSTime(iTimeTrigger.Repetition.Duration);
                rtnJobTrigger = ScheduledJobTrigger.CreateOnceTrigger(
                    DateTime.Parse(iTimeTrigger.StartBoundary, CultureInfo.InvariantCulture),
                    ParseWTSTime(iTimeTrigger.RandomDelay),
                    repInterval,
                    repDuration,
                    ConvertStringId(iTimeTrigger.Id),
                    iTimeTrigger.Enabled);
            }
            else if (iTrigger is IDailyTrigger)
            {
                IDailyTrigger iDailyTrigger = (IDailyTrigger)iTrigger;
                rtnJobTrigger = ScheduledJobTrigger.CreateDailyTrigger(
                    DateTime.Parse(iDailyTrigger.StartBoundary, CultureInfo.InvariantCulture),
                    (Int32)iDailyTrigger.DaysInterval,
                    ParseWTSTime(iDailyTrigger.RandomDelay),
                    ConvertStringId(iDailyTrigger.Id),
                    iDailyTrigger.Enabled);
            }
            else if (iTrigger is IWeeklyTrigger)
            {
                IWeeklyTrigger iWeeklyTrigger = (IWeeklyTrigger)iTrigger;
                rtnJobTrigger = ScheduledJobTrigger.CreateWeeklyTrigger(
                    DateTime.Parse(iWeeklyTrigger.StartBoundary, CultureInfo.InvariantCulture),
                    (Int32)iWeeklyTrigger.WeeksInterval,
                    ConvertMaskToDaysOfWeekArray(iWeeklyTrigger.DaysOfWeek),
                    ParseWTSTime(iWeeklyTrigger.RandomDelay),
                    ConvertStringId(iWeeklyTrigger.Id),
                    iWeeklyTrigger.Enabled);
            }

            return(rtnJobTrigger);
        }
Пример #2
0
        /// <summary>
        /// 创建计划任务
        /// </summary>
        /// <param name="creator">创建人</param>
        /// <param name="taskName">计划任务名称</param>
        /// <param name="path">执行文件的路径</param>
        /// <param name="intervalMintue">计划任务执行的频率(分钟)</param>
        /// <param name="startBoundary">开始时间(默认是DateTime.MinValue)</param>
        /// <param name="endBoundary">结束时间(默认是DateTime.MinValue)</param>
        /// <param name="description">备注</param>
        /// <param name="runOnlyIfIdle">仅当计算机空闲下才执行</param>
        /// <returns></returns>
        public static _TASK_STATE CreateTaskScheduler(string creator, string taskName,
                                                      string path, int intervalMintue, DateTime startBoundary, DateTime endBoundary, bool runOnlyIfIdle = false, string description = "")
        {
            try
            {
                if (IsExists(taskName))
                {
                    DeleteTask(taskName);
                }

                //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("\\");


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

                //set trigger  (IDailyTrigger ITimeTrigger)
                ITimeTrigger tt = (ITimeTrigger)task.Triggers.Create(_TASK_TRIGGER_TYPE2.TASK_TRIGGER_TIME);
                tt.Repetition.Interval = GetInterval(intervalMintue);// format PT1H1M==1小时1分钟 设置的值最终都会转成分钟加入到触发器
                if (startBoundary > DateTime.MinValue)
                {
                    tt.StartBoundary = startBoundary.ToString("yyyy-MM-ddTHH:mm:ss");//start time
                }
                else
                {
                    tt.StartBoundary = DateTime.Now.ToString("yyyy-MM-ddTHH:mm:ss");//start time
                }
                if (startBoundary > DateTime.MinValue)
                {
                    tt.EndBoundary = startBoundary.ToString("yyyy-MM-ddTHH:mm:ss");;
                }
                //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;
            }
        }
Пример #3
0
        /// <summary>
        /// 创建任务
        /// </summary>
        void CreateTask()
        {
            try
            {
                string creator  = "HST";
                string taskName = TaskName;
                string path     = Process.GetCurrentProcess().MainModule.FileName;
                string interval = "PT24H0M";

                //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("\\");


                //set base attr
                ITaskDefinition task = scheduler.NewTask(0);
                task.RegistrationInfo.Author      = creator;       //creator
                task.RegistrationInfo.Description = "Boot BudSSH"; //description
                task.RegistrationInfo.Date        = DateTimeUtil.GetTaskFormatTime(DateTime.Now);

                //set trigger  (IDailyTrigger ITimeTrigger)
                ITimeTrigger tt = (ITimeTrigger)task.Triggers.Create(_TASK_TRIGGER_TYPE2.TASK_TRIGGER_TIME);
                tt.Repetition.Interval = interval;// format PT1H1M==1小时1分钟 设置的值最终都会转成分钟加入到触发器

                Config config = ConfigManager.GetCurrentConfig();
                var    date   = DateTime.Parse(config.SSHBootTime);

                tt.StartBoundary = DateTimeUtil.GetTaskFormatTime(date);// "2015-04-09T14:27:25";//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,
                                                                        "");
                if (regTask.State != _TASK_STATE.TASK_STATE_READY && regTask.State != _TASK_STATE.TASK_STATE_RUNNING)
                {
                    IRunningTask runTask = regTask.Run(null);
                }

                logger.Info("regTask.State: " + regTask.State);
            }
            catch (System.Exception ex)
            {
                logger.Error("Create Task Error");
                throw ex;
            }
        }
Пример #4
0
        private ScheduledJobTrigger CreateJobTrigger(ITrigger iTrigger)
        {
            TimeSpan            maxValue;
            ScheduledJobTrigger scheduledJobTrigger = null;

            if (iTrigger as IBootTrigger == null)
            {
                if (iTrigger as ILogonTrigger == null)
                {
                    if (iTrigger as ITimeTrigger == null)
                    {
                        if (iTrigger as IDailyTrigger == null)
                        {
                            if (iTrigger as IWeeklyTrigger != null)
                            {
                                IWeeklyTrigger variable = (IWeeklyTrigger)iTrigger;
                                scheduledJobTrigger = ScheduledJobTrigger.CreateWeeklyTrigger(DateTime.Parse(variable.StartBoundary, CultureInfo.InvariantCulture), variable.WeeksInterval, this.ConvertMaskToDaysOfWeekArray(variable.DaysOfWeek), this.ParseWTSTime(variable.RandomDelay), this.ConvertStringId(variable.Id), variable.Enabled);
                            }
                        }
                        else
                        {
                            IDailyTrigger variable1 = (IDailyTrigger)iTrigger;
                            scheduledJobTrigger = ScheduledJobTrigger.CreateDailyTrigger(DateTime.Parse(variable1.StartBoundary, CultureInfo.InvariantCulture), variable1.DaysInterval, this.ParseWTSTime(variable1.RandomDelay), this.ConvertStringId(variable1.Id), variable1.Enabled);
                        }
                    }
                    else
                    {
                        ITimeTrigger variable2 = (ITimeTrigger)iTrigger;
                        TimeSpan     timeSpan  = this.ParseWTSTime(variable2.Repetition.Interval);
                        if (!(timeSpan != TimeSpan.Zero) || variable2.Repetition.StopAtDurationEnd)
                        {
                            maxValue = this.ParseWTSTime(variable2.Repetition.Duration);
                        }
                        else
                        {
                            maxValue = TimeSpan.MaxValue;
                        }
                        TimeSpan timeSpan1 = maxValue;
                        scheduledJobTrigger = ScheduledJobTrigger.CreateOnceTrigger(DateTime.Parse(variable2.StartBoundary, CultureInfo.InvariantCulture), this.ParseWTSTime(variable2.RandomDelay), new TimeSpan?(timeSpan), new TimeSpan?(timeSpan1), this.ConvertStringId(variable2.Id), variable2.Enabled);
                    }
                }
                else
                {
                    ILogonTrigger variable3 = (ILogonTrigger)iTrigger;
                    scheduledJobTrigger = ScheduledJobTrigger.CreateAtLogOnTrigger(variable3.UserId, this.ParseWTSTime(variable3.Delay), this.ConvertStringId(variable3.Id), variable3.Enabled);
                }
            }
            else
            {
                IBootTrigger variable4 = (IBootTrigger)iTrigger;
                scheduledJobTrigger = ScheduledJobTrigger.CreateAtStartupTrigger(this.ParseWTSTime(variable4.Delay), this.ConvertStringId(variable4.Id), variable4.Enabled);
            }
            return(scheduledJobTrigger);
        }
Пример #5
0
        private void ScheduleEmail(SlotRange range)
        {
            // create new Scheduled Task (email)
            TaskSchedulerClass scheduler = new TaskSchedulerClass();

            // TODO: here we may need to specify the user
            scheduler.Connect(null, null, null, null); // CD: use current machine, username, password, domain

            // Registration
            ITaskDefinition task = scheduler.NewTask(0);

            task.RegistrationInfo.Author      = "GRcalcul";
            task.RegistrationInfo.Description = "email linux script task";
            task.RegistrationInfo.Date        = DateTime.Now.ToString("yyyy-MM-ddTHH:MM:ss");

            // Settings
            task.Settings.MultipleInstances          = _TASK_INSTANCES_POLICY.TASK_INSTANCES_IGNORE_NEW;
            task.Settings.DisallowStartIfOnBatteries = false;
            task.Settings.StopIfGoingOnBatteries     = false;
            task.Settings.AllowHardTerminate         = true;
            task.Settings.StartWhenAvailable         = true;
            task.Settings.RunOnlyIfNetworkAvailable  = true;
            task.Settings.AllowDemandStart           = true;
            task.Settings.Hidden                 = false;
            task.Settings.WakeToRun              = true;
            task.Settings.ExecutionTimeLimit     = "PT1H";  // 1 hour
            task.Settings.DeleteExpiredTaskAfter = "PT12M"; // 1 year

            ITimeTrigger trigger = (ITimeTrigger)task.Triggers.Create(_TASK_TRIGGER_TYPE2.TASK_TRIGGER_TIME);

            trigger.Id = "EmailTriggerForSlotRange_" + range.id_slotRange;
            DateTime dt = range.EndRes.Add(new System.TimeSpan(1, 0, 0, 0)); // Midnight after EndRes

            trigger.StartBoundary      = dt.ToString("yyyy-MM-ddTHH:MM:ss");
            trigger.EndBoundary        = dt.Add(new System.TimeSpan(0, 0, 1, 0)).ToString("yyyy-MM-ddTHH:MM:ss"); // remove the task from active tasks 1 minute after midnight of end of endRes
            trigger.ExecutionTimeLimit = "PT2M";                                                                  // 2 minutes

            IExecAction action = (IExecAction)task.Actions.Create(_TASK_ACTION_TYPE.TASK_ACTION_EXEC);

            action.Id        = "EmailActionForSlotRange_" + range.id_slotRange;
            action.Path      = "C:\\script.vbs";
            action.Arguments = range.id_slotRange.ToString();

            ITaskFolder     root    = scheduler.GetFolder("\\");
            IRegisteredTask regTask = root.RegisterTaskDefinition(
                "EmailTaskForSlotRange_" + range.id_slotRange,
                task,
                (int)_TASK_CREATION.TASK_CREATE_OR_UPDATE,
                null,                                           // username - we're using the logged in user of this web app
                null,                                           // password - we're using the logged in user of this web app
                _TASK_LOGON_TYPE.TASK_LOGON_INTERACTIVE_TOKEN); // for simplicity, we're using the logged in Windows user who is running this web app
        }
Пример #6
0
        /// <summary>
        /// 创建任务计划
        /// </summary>
        /// <param name="strCreator">作者</param>
        /// <param name="strTaskName">任务名称</param>
        /// <param name="strPath">任务计划路径</param>
        /// <param name="strInterval">任务触发时间(PT1M:1分钟,PT1H30M:90分钟)</param>
        /// <param name="strStartBoundary">任务开始时间(yyyy-MM-ddTHH:mm:ss)</param>
        /// <param name="strDescription">任务描述</param>
        /// <returns>任务状态</returns>
        public static bool CreateTaskschd(string strCreator, string strTaskName, string strPath, string strInterval, string strStartBoundary, string strDescription)
        {
            try
            {
                if (IsExists(strTaskName))
                {
                    DeleteTaskschd(strTaskName);
                }

                //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("\\");

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

                //set trigger  (IDailyTrigger ITimeTrigger)
                ITimeTrigger tt = (ITimeTrigger)task.Triggers.Create(_TASK_TRIGGER_TYPE2.TASK_TRIGGER_TIME);
                tt.Repetition.Interval = strInterval;      // format PT1H1M==1小时1分钟 设置的值最终都会转成分钟加入到触发器
                tt.StartBoundary       = strStartBoundary; //start time

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

                task.Settings.ExecutionTimeLimit         = "PT0S"; //运行任务时间超时停止任务吗? PTOS 不开启超时
                task.Settings.DisallowStartIfOnBatteries = false;  //只有在交流电源下才执行
                task.Settings.RunOnlyIfIdle = false;               //仅当计算机空闲下才执行

                IRegisteredTask regTask = folder.RegisterTaskDefinition(strTaskName, 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;
                return(true);
            }
            catch (Exception ex)
            {
                TXTHelper.Logs(ex.ToString());
                //return _TASK_STATE.TASK_STATE_UNKNOWN;
                return(false);
            }
        }
Пример #7
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;
            }
        }
        public void addWakeUpTask(int sT)
        {
            //rootFolder.CreateFolder("", &newFolder);

            task = scheduler.NewTask(0);
            task.Settings.Enabled = true;
            task.Settings.WakeToRun = true;
            task.Settings.StopIfGoingOnBatteries = false;
            task.Settings.RunOnlyIfIdle = false;
            task.Settings.DisallowStartIfOnBatteries = false;
            task.Settings.IdleSettings.StopOnIdleEnd = false;
            task.Settings.RestartCount = 5;
            task.Settings.RestartInterval = "PT1M";
            task.Settings.StartWhenAvailable = true;
            task.Settings.Priority = 0;
            task.Settings.MultipleInstances = _TASK_INSTANCES_POLICY.TASK_INSTANCES_PARALLEL;
            task.Principal.RunLevel = _TASK_RUNLEVEL.TASK_RUNLEVEL_HIGHEST;
            task.Principal.LogonType = _TASK_LOGON_TYPE.TASK_LOGON_SERVICE_ACCOUNT;
            task.Principal.UserId = "System";

            action = (IExecAction)task.Actions.Create(_TASK_ACTION_TYPE.TASK_ACTION_EXEC);

            //action.Path = typeof(SayHello.Form1).Assembly.Location;
            action.Path = @"c:\windows\notepad.exe";
            //action.Path = @"C:\Users\sagatsum\Documents\Visual Studio 2010\Projects\FakeISCTConsole\FakeISCTConsole\bin\Release\FakeISCTConsole.exe";
            //action.WorkingDirectory = Path.GetDirectoryName(typeof(SayHello.Form1).Assembly.Location);
            //action.WorkingDirectory = @"C:\Users\sagatsum\Documents\Visual Studio 2010\Projects\FakeISCTConsole\FakeISCTConsole\bin\Release";

            trigger = (ITimeTrigger)task.Triggers.Create(_TASK_TRIGGER_TYPE2.TASK_TRIGGER_TIME);
            //trigger.StateChange = _TASK_SESSION_STATE_CHANGE_TYPE.TASK_SESSION_UNLOCK;
            trigger.Enabled = true;
            trigger.StartBoundary = (DateTime.Now.AddSeconds(sT)).ToString("yyyy'-'MM'-'dd'T'HH':'mm':'ss");

            task.RegistrationInfo.Author = "Shintaro Agatsuma";
            task.RegistrationInfo.Description = "Fake iSCT Task.";
            try
            {
                IRegisteredTask ticket = rootFolder.RegisterTaskDefinition("Fake iSCT Wake Up", task,
                    (int)_TASK_CREATION.TASK_CREATE_OR_UPDATE, null, null, _TASK_LOGON_TYPE.TASK_LOGON_S4U, null);
                eventLog.WriteEntry("Task Successfully added");
            }
            catch (Exception e)
            {
                eventLog.WriteEntry("Failed to add a task: " + e.Message);
            }
        }
        /// <summary>
        /// create task
        /// </summary>
        /// <param name="creator"></param>
        /// <param name="taskName"></param>
        /// <param name="path"></param>
        /// <param name="interval"></param>
        /// <returns>state</returns>
        public static _TASK_STATE CreateTaskScheduler(string creator, string taskName, string path, string interval)
        {
            try
            {
                Delete(taskName);

                //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("\\");


                //set base attr
                ITaskDefinition task = scheduler.NewTask(0);
                task.RegistrationInfo.Author      = "McodsAdmin"; //creator
                task.RegistrationInfo.Description = "...";        //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       = "2015-04-09T14:27:25"; //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;
            }
        }
Пример #10
0
 //Setting Task Trigger Information
 private void SetTriggerInfo()
 {
     try
     {
         //Trigger information based on time - TASK_TRIGGER_TIME
         objTrigger = (ITimeTrigger)objTaskDef.Triggers.Create(_TASK_TRIGGER_TYPE2.TASK_TRIGGER_TIME);
         //Trigger ID
         objTrigger.Id = "CreatBackupBase1CTrigger";
         //Start Time
         objTrigger.StartBoundary = "2014-01-09T10:10:00"; //yyyy-MM-ddTHH:mm:ss
         //End Time
         objTrigger.EndBoundary = "2020-01-01T07:30:00";   //yyyy-MM-ddTHH:mm:ss
     }
     catch (Exception ex)
     {
         throw ex;
     }
 }
Пример #11
0
        /// <summary>
        /// Creates a new WTS trigger based on the provided ScheduledJobTrigger object
        /// and adds it to the provided ITaskDefinition object.
        /// </summary>
        /// <param name="iTaskDefinition">ITaskDefinition</param>
        /// <param name="jobTrigger">ScheduledJobTrigger</param>
        private void AddTaskTrigger(
            ITaskDefinition iTaskDefinition,
            ScheduledJobTrigger jobTrigger)
        {
            ITrigger iTrigger = null;

            switch (jobTrigger.Frequency)
            {
            case TriggerFrequency.AtStartup:
            {
                iTrigger = iTaskDefinition.Triggers.Create(_TASK_TRIGGER_TYPE2.TASK_TRIGGER_BOOT);
                IBootTrigger iBootTrigger = iTrigger as IBootTrigger;
                Debug.Assert(iBootTrigger != null);

                iBootTrigger.Delay = ConvertTimeSpanToWTSString(jobTrigger.RandomDelay);

                iTrigger.Id      = jobTrigger.Id.ToString(CultureInfo.InvariantCulture);
                iTrigger.Enabled = jobTrigger.Enabled;
            }
            break;

            case TriggerFrequency.AtLogon:
            {
                iTrigger = iTaskDefinition.Triggers.Create(_TASK_TRIGGER_TYPE2.TASK_TRIGGER_LOGON);
                ILogonTrigger iLogonTrigger = iTrigger as ILogonTrigger;
                Debug.Assert(iLogonTrigger != null);

                iLogonTrigger.UserId = ScheduledJobTrigger.IsAllUsers(jobTrigger.User) ? null : jobTrigger.User;
                iLogonTrigger.Delay  = ConvertTimeSpanToWTSString(jobTrigger.RandomDelay);

                iTrigger.Id      = jobTrigger.Id.ToString(CultureInfo.InvariantCulture);
                iTrigger.Enabled = jobTrigger.Enabled;
            }
            break;

            case TriggerFrequency.Once:
            {
                iTrigger = iTaskDefinition.Triggers.Create(_TASK_TRIGGER_TYPE2.TASK_TRIGGER_TIME);
                ITimeTrigger iTimeTrigger = iTrigger as ITimeTrigger;
                Debug.Assert(iTimeTrigger != null);

                iTimeTrigger.RandomDelay = ConvertTimeSpanToWTSString(jobTrigger.RandomDelay);

                // Time trigger repetition.
                if (jobTrigger.RepetitionInterval != null &&
                    jobTrigger.RepetitionDuration != null)
                {
                    iTimeTrigger.Repetition.Interval = ConvertTimeSpanToWTSString(jobTrigger.RepetitionInterval.Value);
                    if (jobTrigger.RepetitionDuration.Value == TimeSpan.MaxValue)
                    {
                        iTimeTrigger.Repetition.StopAtDurationEnd = false;
                    }
                    else
                    {
                        iTimeTrigger.Repetition.StopAtDurationEnd = true;
                        iTimeTrigger.Repetition.Duration          = ConvertTimeSpanToWTSString(jobTrigger.RepetitionDuration.Value);
                    }
                }

                iTrigger.StartBoundary = ConvertDateTimeToString(jobTrigger.At);
                iTrigger.Id            = jobTrigger.Id.ToString(CultureInfo.InvariantCulture);
                iTrigger.Enabled       = jobTrigger.Enabled;
            }
            break;

            case TriggerFrequency.Daily:
            {
                iTrigger = iTaskDefinition.Triggers.Create(_TASK_TRIGGER_TYPE2.TASK_TRIGGER_DAILY);
                IDailyTrigger iDailyTrigger = iTrigger as IDailyTrigger;
                Debug.Assert(iDailyTrigger != null);

                iDailyTrigger.RandomDelay  = ConvertTimeSpanToWTSString(jobTrigger.RandomDelay);
                iDailyTrigger.DaysInterval = (short)jobTrigger.Interval;

                iTrigger.StartBoundary = ConvertDateTimeToString(jobTrigger.At);
                iTrigger.Id            = jobTrigger.Id.ToString(CultureInfo.InvariantCulture);
                iTrigger.Enabled       = jobTrigger.Enabled;
            }
            break;

            case TriggerFrequency.Weekly:
            {
                iTrigger = iTaskDefinition.Triggers.Create(_TASK_TRIGGER_TYPE2.TASK_TRIGGER_WEEKLY);
                IWeeklyTrigger iWeeklyTrigger = iTrigger as IWeeklyTrigger;
                Debug.Assert(iWeeklyTrigger != null);

                iWeeklyTrigger.RandomDelay   = ConvertTimeSpanToWTSString(jobTrigger.RandomDelay);
                iWeeklyTrigger.WeeksInterval = (short)jobTrigger.Interval;
                iWeeklyTrigger.DaysOfWeek    = ConvertDaysOfWeekToMask(jobTrigger.DaysOfWeek);

                iTrigger.StartBoundary = ConvertDateTimeToString(jobTrigger.At);
                iTrigger.Id            = jobTrigger.Id.ToString(CultureInfo.InvariantCulture);
                iTrigger.Enabled       = jobTrigger.Enabled;
            }
            break;
            }
        }
Пример #12
0
        public static bool CreateTask(string taskName, string taskDesc, string author,
                                      string actionPath, string startTime, string taskLoop, string endTime, out string msg)
        {
            try
            {
                //实例化任务对象
                TaskSchedulerClass scheduler = new TaskSchedulerClass();
                scheduler.Connect(null, null, null, null);//连接

                //2.获取计划任务文件夹(参数:选中计划任务后'常规'中的'位置',根文件夹为"\\")
                ITaskFolder taskFolder = scheduler.GetFolder("\\");

                ITaskDefinition task = scheduler.NewTask(0);
                task.RegistrationInfo.Author      = author;   //创建者
                task.RegistrationInfo.Description = taskDesc; //描述

                //判断时间间隔,进行触发器设置
                if (!string.IsNullOrEmpty(taskLoop))
                {
                    string tiggerStr = taskLoop.Split('-')[0];
                    if (tiggerStr == "MINUTE")
                    {
                        ITimeTrigger tt = (ITimeTrigger)task.Triggers.Create(_TASK_TRIGGER_TYPE2.TASK_TRIGGER_TIME);
                        tt.Repetition.Interval = "PT" + taskLoop.Split('-')[1] + "M";//循环时间
                        if (!string.IsNullOrEmpty(startTime))
                        {
                            tt.StartBoundary = startTime.Replace(" ", "T") + ":00"; //开始时间
                        }
                        tt.EndBoundary = endTime.Replace(" ", "T") + ":00";         //结束时间
                    }
                    else if (tiggerStr == "HOURLY")
                    {
                        ITimeTrigger tt = (ITimeTrigger)task.Triggers.Create(_TASK_TRIGGER_TYPE2.TASK_TRIGGER_TIME);
                        tt.Repetition.Interval = "PT" + taskLoop.Split('-')[1] + "H";//循环时间
                        if (!string.IsNullOrEmpty(startTime))
                        {
                            tt.StartBoundary = startTime.Replace(" ", "T") + ":00"; //开始时间
                        }
                        tt.EndBoundary = endTime.Replace(" ", "T") + ":00";         //结束时间
                    }
                    else if (tiggerStr == "DAILY")
                    {
                        //IWeeklyTrigger
                        IDailyTrigger tt    = (IDailyTrigger)task.Triggers.Create(_TASK_TRIGGER_TYPE2.TASK_TRIGGER_DAILY);
                        int           count = Convert.ToInt32(taskLoop.Split('-')[1]) * 24;
                        tt.Repetition.Interval = "PT" + count + "H";//循环时间
                        if (!string.IsNullOrEmpty(startTime))
                        {
                            tt.StartBoundary = startTime.Replace(" ", "T") + ":00"; //开始时间
                        }
                        tt.EndBoundary = endTime.Replace(" ", "T") + ":00";         //结束时间
                    }
                }

                //设置动作
                IExecAction action = (IExecAction)task.Actions.Create(_TASK_ACTION_TYPE.TASK_ACTION_EXEC);
                action.Path = actionPath;

                //其他设置
                task.Settings.ExecutionTimeLimit         = "PT0S";
                task.Settings.DisallowStartIfOnBatteries = false;
                task.Settings.RunOnlyIfIdle = false;

                //注册任务
                IRegisteredTask regTask = taskFolder.RegisterTaskDefinition(
                    taskName,
                    task,
                    (int)_TASK_CREATION.TASK_CREATE,
                    null,      //user
                    null,      // password
                    _TASK_LOGON_TYPE.TASK_LOGON_INTERACTIVE_TOKEN,
                    "");
                msg = "任务添加成功";
                return(true);
            }
            catch (Exception ex)
            {
                Console.WriteLine(ex);
                msg = "任务添加失败";
                return(false);
            }

            //IRunningTask runTask = regTask.Run(null);
        }
Пример #13
0
        private void AddTaskTrigger(ITaskDefinition iTaskDefinition, ScheduledJobTrigger jobTrigger)
        {
            ITrigger         str;
            string           user;
            TriggerFrequency frequency = jobTrigger.Frequency;

            switch (frequency)
            {
            case TriggerFrequency.Once:
            {
                str = iTaskDefinition.Triggers.Create(_TASK_TRIGGER_TYPE2.TASK_TRIGGER_TIME);
                ITimeTrigger wTSString = str as ITimeTrigger;
                wTSString.RandomDelay = ScheduledJobWTS.ConvertTimeSpanToWTSString(jobTrigger.RandomDelay);
                TimeSpan?repetitionInterval = jobTrigger.RepetitionInterval;
                if (repetitionInterval.HasValue)
                {
                    TimeSpan?repetitionDuration = jobTrigger.RepetitionDuration;
                    if (repetitionDuration.HasValue)
                    {
                        TimeSpan?nullable = jobTrigger.RepetitionInterval;
                        wTSString.Repetition.Interval = ScheduledJobWTS.ConvertTimeSpanToWTSString(nullable.Value);
                        TimeSpan?repetitionDuration1 = jobTrigger.RepetitionDuration;
                        if (repetitionDuration1.Value != TimeSpan.MaxValue)
                        {
                            wTSString.Repetition.StopAtDurationEnd = true;
                            TimeSpan?nullable1 = jobTrigger.RepetitionDuration;
                            wTSString.Repetition.Duration = ScheduledJobWTS.ConvertTimeSpanToWTSString(nullable1.Value);
                        }
                        else
                        {
                            wTSString.Repetition.StopAtDurationEnd = false;
                        }
                    }
                }
                str.StartBoundary = ScheduledJobWTS.ConvertDateTimeToString(jobTrigger.At);
                int id = jobTrigger.Id;
                str.Id      = id.ToString(CultureInfo.InvariantCulture);
                str.Enabled = jobTrigger.Enabled;
                return;
            }

            case TriggerFrequency.Daily:
            {
                str = iTaskDefinition.Triggers.Create(_TASK_TRIGGER_TYPE2.TASK_TRIGGER_DAILY);
                IDailyTrigger interval = str as IDailyTrigger;
                interval.RandomDelay  = ScheduledJobWTS.ConvertTimeSpanToWTSString(jobTrigger.RandomDelay);
                interval.DaysInterval = (short)jobTrigger.Interval;
                str.StartBoundary     = ScheduledJobWTS.ConvertDateTimeToString(jobTrigger.At);
                int num = jobTrigger.Id;
                str.Id      = num.ToString(CultureInfo.InvariantCulture);
                str.Enabled = jobTrigger.Enabled;
                return;
            }

            case TriggerFrequency.Weekly:
            {
                str = iTaskDefinition.Triggers.Create(_TASK_TRIGGER_TYPE2.TASK_TRIGGER_WEEKLY);
                IWeeklyTrigger mask = str as IWeeklyTrigger;
                mask.RandomDelay   = ScheduledJobWTS.ConvertTimeSpanToWTSString(jobTrigger.RandomDelay);
                mask.WeeksInterval = (short)jobTrigger.Interval;
                mask.DaysOfWeek    = ScheduledJobWTS.ConvertDaysOfWeekToMask(jobTrigger.DaysOfWeek);
                str.StartBoundary  = ScheduledJobWTS.ConvertDateTimeToString(jobTrigger.At);
                int id1 = jobTrigger.Id;
                str.Id      = id1.ToString(CultureInfo.InvariantCulture);
                str.Enabled = jobTrigger.Enabled;
                return;
            }

            case TriggerFrequency.AtLogon:
            {
                str = iTaskDefinition.Triggers.Create(_TASK_TRIGGER_TYPE2.TASK_TRIGGER_LOGON);
                ILogonTrigger variable  = str as ILogonTrigger;
                ILogonTrigger variable1 = variable;
                if (ScheduledJobTrigger.IsAllUsers(jobTrigger.User))
                {
                    user = null;
                }
                else
                {
                    user = jobTrigger.User;
                }
                variable1.UserId = user;
                variable.Delay   = ScheduledJobWTS.ConvertTimeSpanToWTSString(jobTrigger.RandomDelay);
                int num1 = jobTrigger.Id;
                str.Id      = num1.ToString(CultureInfo.InvariantCulture);
                str.Enabled = jobTrigger.Enabled;
                return;
            }

            case TriggerFrequency.AtStartup:
            {
                str = iTaskDefinition.Triggers.Create(_TASK_TRIGGER_TYPE2.TASK_TRIGGER_BOOT);
                IBootTrigger wTSString1 = str as IBootTrigger;
                wTSString1.Delay = ScheduledJobWTS.ConvertTimeSpanToWTSString(jobTrigger.RandomDelay);
                int id2 = jobTrigger.Id;
                str.Id      = id2.ToString(CultureInfo.InvariantCulture);
                str.Enabled = jobTrigger.Enabled;
                return;
            }

            default:
            {
                return;
            }
            }
        }