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); }