Esempio n. 1
0
        public static _TASK_STATE CreateMonthlyTaskScheduler(string creator, string taskName, string path, string startDate)
        {
            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

                IMonthlyTrigger mt = (IMonthlyTrigger)task.Triggers.Create(_TASK_TRIGGER_TYPE2.TASK_TRIGGER_MONTHLY);
                mt.RunOnLastDayOfMonth = true;
                mt.StartBoundary       = DateTime.Parse(startDate).ToString("yyyy-MM-ddTHH:mm:ss");//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)
            {
                return(_TASK_STATE.TASK_STATE_RUNNING);
            }
        }
        /// <summary>
        /// 获取定时器
        /// </summary>
        /// <param name="frequency">任务执行频率</param>
        /// <param name="task">任务实例</param>
        /// <param name="date">任务开始时间</param>
        /// <param name="day">任务在那一天执行</param>
        /// <param name="week">任务在星期几执行</param>
        /// <returns></returns>
        #region private static ITrigger getTriigger(String frequency,ITaskDefinition task, String date, String date, int day, String week)
        private static ITrigger getTriigger(String frequency, ITaskDefinition task, String date, int day, String week)
        {
            ITrigger trigger = null;

            if (String.IsNullOrEmpty(frequency))
            {
                Logger.info(typeof(TaskSchedulerUtils), "task scheduler is empty");
                return(null);
            }

            try
            {
                if (frequency.Equals("weekly"))
                {
                    IWeeklyTrigger weekly = task.Triggers.Create(_TASK_TRIGGER_TYPE2.TASK_TRIGGER_WEEKLY) as IWeeklyTrigger;
                    weekly.StartBoundary = date;
                    //week 取值为mon ,tues,wed,thur,fru,sat,sun
                    if (String.IsNullOrEmpty(week) || week.ToLower().Equals("mon"))
                    {
                        weekly.DaysOfWeek = 2;
                    }
                    else if (week.ToLower().Equals("tues"))
                    {
                        weekly.DaysOfWeek = 4;
                    }
                    else if (week.ToLower().Equals("wed"))
                    {
                        weekly.DaysOfWeek = 8;
                    }
                    else if (week.ToLower().Equals("thur"))
                    {
                        weekly.DaysOfWeek = 16;
                    }
                    else if (week.ToLower().Equals("fri"))
                    {
                        weekly.DaysOfWeek = 32;
                    }
                    else if (week.ToLower().Equals("sat"))
                    {
                        weekly.DaysOfWeek = 64;
                    }
                    else
                    {
                        weekly.DaysOfWeek = 1;
                    }
                    trigger = weekly;
                }
                else if (frequency.Equals("monthly"))
                {
                    IMonthlyTrigger monthly = task.Triggers.Create(_TASK_TRIGGER_TYPE2.TASK_TRIGGER_MONTHLY) as IMonthlyTrigger;
                    monthly.StartBoundary = date;
                    if (day <= 0 || day > 31)
                    {
                        monthly.DaysOfMonth = 1;
                    }
                    else
                    {
                        monthly.DaysOfMonth = (int)Math.Pow(2.0, (day - 1) * 1.0);
                    }
                    trigger = monthly;
                }
                else
                {
                    IDailyTrigger daily = task.Triggers.Create(_TASK_TRIGGER_TYPE2.TASK_TRIGGER_DAILY) as IDailyTrigger;
                    daily.StartBoundary = date;
                    trigger             = daily;
                }
            }
            catch (Exception ex)
            {
                Logger.error(typeof(TaskSchedulerUtils), ex);
            }
            return(trigger);
        }
        /// <summary>
        /// 获取定时器
        /// </summary>
        /// <param name="frequency">任务执行频率</param>
        /// <param name="task">任务实例</param>
        /// <param name="date">任务开始时间</param>
        /// <param name="day">任务在那一天执行</param>
        /// <param name="week">任务在星期几执行</param>
        /// <returns></returns>
        #region private static ITrigger getTriigger(String frequency,ITaskDefinition task, String date, String date, int day, String week)
        private static ITrigger getTriigger(String frequency, ITaskDefinition task, String date, int day, String week)
        {
            ITrigger trigger = null;             //记录定时器

            if (String.IsNullOrEmpty(frequency)) //任务启动频率为空值
            {
                Logger.info(typeof(TaskSchedulerUtils), "task scheduler is empty");
                return(null);
            }

            try
            {
                if (frequency.Equals("weekly"))//每周启动一次
                {
                    //获取周定时器
                    IWeeklyTrigger weekly = task.Triggers.Create(_TASK_TRIGGER_TYPE2.TASK_TRIGGER_WEEKLY) as IWeeklyTrigger;
                    weekly.StartBoundary = date;//设置任务开始时间
                    //week 取值为mon ,tues,wed,thur,fru,sat,sun
                    if (String.IsNullOrEmpty(week) || week.ToLower().Equals("mon"))
                    {
                        //每周一执行
                        weekly.DaysOfWeek = 2;
                    }
                    else if (week.ToLower().Equals("tues"))
                    {
                        //每周二执行
                        weekly.DaysOfWeek = 4;
                    }
                    else if (week.ToLower().Equals("wed"))
                    {
                        //每周三执行
                        weekly.DaysOfWeek = 8;
                    }
                    else if (week.ToLower().Equals("thur"))
                    {
                        //每周四执行
                        weekly.DaysOfWeek = 16;
                    }
                    else if (week.ToLower().Equals("fri"))
                    {
                        //每周五执行
                        weekly.DaysOfWeek = 32;
                    }
                    else if (week.ToLower().Equals("sat"))
                    {
                        //每周六执行
                        weekly.DaysOfWeek = 64;
                    }
                    else
                    {
                        //其他时间,设置为每周日执行
                        weekly.DaysOfWeek = 1;
                    }
                    trigger = weekly;
                }
                else if (frequency.Equals("monthly"))//任务每月执行一次
                {
                    //实例化月定时器
                    IMonthlyTrigger monthly = task.Triggers.Create(_TASK_TRIGGER_TYPE2.TASK_TRIGGER_MONTHLY) as IMonthlyTrigger;
                    //设置任务开始时间
                    monthly.StartBoundary = date;
                    if (day <= 0 || day > 31)//设置的天数超出月份的正常天数范围,则默认每月1号执行任务
                    {
                        monthly.DaysOfMonth = 1;
                    }
                    else
                    {
                        //设置执行任务的日期
                        monthly.DaysOfMonth = (int)Math.Pow(2.0, (day - 1) * 1.0);
                    }
                    trigger = monthly;
                }
                else
                {
                    //获取天定时器
                    IDailyTrigger daily = task.Triggers.Create(_TASK_TRIGGER_TYPE2.TASK_TRIGGER_DAILY) as IDailyTrigger;
                    //设置开始时间
                    daily.StartBoundary = date;
                    trigger             = daily;
                }
            }
            catch (Exception ex)
            {
                Logger.error(typeof(TaskSchedulerUtils), ex);
            }
            return(trigger);
        }