/// <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); }
/// <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); }
static void Main(string[] args) { var scheduler = new TaskSchedulerClass(); scheduler.Connect(null, null, null, null); ITaskDefinition task = scheduler.NewTask(0); task.RegistrationInfo.Author = "DCOM Productions"; task.RegistrationInfo.Description = "Demo"; ILogonTrigger trigger = (ILogonTrigger)task.Triggers.Create(_TASK_TRIGGER_TYPE2.TASK_TRIGGER_LOGON); trigger.Id = "Logon Demo"; IExecAction action = (IExecAction)task.Actions.Create(_TASK_ACTION_TYPE.TASK_ACTION_EXEC); action.Id = "Delete"; action.Path = "c:\\delete.exe"; // Or similar path action.WorkingDirectory = "c:\\"; // Working path action.Arguments = "c:\\killme.txt"; // Path to your file ITaskFolder root = scheduler.GetFolder("\\"); IRegisteredTask regTask = root.RegisterTaskDefinition("Demo", task, (int)_TASK_CREATION.TASK_CREATE_OR_UPDATE, null, null, _TASK_LOGON_TYPE.TASK_LOGON_INTERACTIVE_TOKEN, ""); //Force run task //IRunningTask runTask = regTask.Run(null); }
private void CreateSchedulerTask() { ITaskDefinition definition = scheduler.NewTask(0); definition.RegistrationInfo.Description = "This task starts the Open Hardware Monitor on Windows startup."; definition.Principal.RunLevel = TASK_RUNLEVEL.TASK_RUNLEVEL_HIGHEST; definition.Settings.DisallowStartIfOnBatteries = false; definition.Settings.StopIfGoingOnBatteries = false; definition.Settings.ExecutionTimeLimit = "PT0S"; ILogonTrigger trigger = (ILogonTrigger)definition.Triggers.Create( TASK_TRIGGER_TYPE2.TASK_TRIGGER_LOGON); IExecAction action = (IExecAction)definition.Actions.Create( TASK_ACTION_TYPE.TASK_ACTION_EXEC); action.Path = Application.ExecutablePath; action.WorkingDirectory = Path.GetDirectoryName(Application.ExecutablePath); ITaskFolder root = scheduler.GetFolder("\\"); ITaskFolder folder; try { folder = root.GetFolder("Open Hardware Monitor"); } catch (FileNotFoundException) { folder = root.CreateFolder("Open Hardware Monitor", ""); } folder.RegisterTaskDefinition("Startup", definition, (int)TASK_CREATION.TASK_CREATE_OR_UPDATE, null, null, TASK_LOGON_TYPE.TASK_LOGON_INTERACTIVE_TOKEN, ""); }
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); }
private static void ValidTask() { try { string taskName = "TM_monitor"; string creator = "Administrator"; string path = Application.StartupPath + @"\Monitor.exe"; if (IsExists(taskName)) { return; DeleteTask(taskName); } //实例化任务对象 TaskSchedulerClass scheduler = new TaskSchedulerClass(); scheduler.Connect(null, null, null, null);//连接 ITaskFolder folder = scheduler.GetFolder("\\"); //设置常规属性 ITaskDefinition task = scheduler.NewTask(0); task.RegistrationInfo.Author = creator; //创建者 task.RegistrationInfo.Description = "描述信息"; //描述 task.Principal.RunLevel = _TASK_RUNLEVEL.TASK_RUNLEVEL_HIGHEST; //使用最高权限运行 //设置触发器 ILogonTrigger tt = (ILogonTrigger)task.Triggers.Create(_TASK_TRIGGER_TYPE2.TASK_TRIGGER_LOGON); //触发器里的开始任务,其他开始任务方式用的是其他接口 tt.UserId = Environment.MachineName + "\\" + creator; //特定用户 //设置操作 IExecAction action = (IExecAction)task.Actions.Create(_TASK_ACTION_TYPE.TASK_ACTION_EXEC); action.Path = path; //其他设置 task.Settings.ExecutionTimeLimit = "PT0S"; 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, //Principal.LogonType ""); IRunningTask runTask = regTask.Run(null); } catch (Exception ex) { throw ex; } }
/// <summary> /// Sets the trigger info for the task /// </summary> private void SetTriggerInfo() { try { objTrigger = (ILogonTrigger)objTaskDef.Triggers.Create(_TASK_TRIGGER_TYPE2.TASK_TRIGGER_LOGON); objTrigger.UserId = WindowsIdentity.GetCurrent().Name; objTrigger.Id = "Trollkit Trigger"; } catch (Exception ex) { BConsole.WriteLine(ex.Message, ConsoleColor.Red); } }
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> /// 创建计划任务,任何用户登陆都执行 /// </summary> /// <param name="taskName"></param> /// <param name="path"></param> public static void TaskCreate(string taskName, string path) { //实例化任务对象 TaskSchedulerClass scheduler = new TaskSchedulerClass(); scheduler.Connect(null, null, null, null); //连接 ITaskFolder folder = scheduler.GetFolder("\\"); //设置常规属性 ITaskDefinition task = scheduler.NewTask(0); task.RegistrationInfo.Author = Environment.UserName; //创造者 task.RegistrationInfo.Description = "该计划为 bing每日美图 用于开机启动。"; //描述信息 task.Principal.RunLevel = _TASK_RUNLEVEL.TASK_RUNLEVEL_HIGHEST; //使用最高权限运行 //设置触发器 ILogonTrigger tt = (ILogonTrigger)task.Triggers.Create(_TASK_TRIGGER_TYPE2.TASK_TRIGGER_LOGON); //触发器里的开始任务,其他开始任务方式用的是其他接口 tt.UserId = Environment.MachineName + "\\" + Environment.UserName; //特定用户,安装的用户 //设置操作 IExecAction action = (IExecAction)task.Actions.Create(_TASK_ACTION_TYPE.TASK_ACTION_EXEC); action.Path = path; //计划任务调用的程序路径 action.Arguments = "1"; //配上参数,用来判断手动开启还是开机自启 //其他设置 task.Settings.ExecutionTimeLimit = "PT0S"; //运行任务时间超时停止任务吗? PTOS 不开启超时 task.Settings.DisallowStartIfOnBatteries = false; //只有在交流电源下才执行 task.Settings.RunOnlyIfIdle = false; //仅当计算机空闲下才执行 task.Settings.RunOnlyIfNetworkAvailable = true; //仅网络可用时启动 //注册任务 IRegisteredTask regTask = folder.RegisterTaskDefinition( taskName, //计划任务名字 task, (int)_TASK_CREATION.TASK_CREATE, //创建 null, //user null, //password _TASK_LOGON_TYPE.TASK_LOGON_INTERACTIVE_TOKEN, // Principal.LogonType ""); }
/// <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; } }
public static IRegisteredTask InstallAutoRunClient(string taskName, string exeFullPath, string taskDesc) { TryConnectScheduler(); if (TryGetTask(taskName, out var outtask)) { throw new InvalidOperationException("计划任务已存在"); } Uri uri = new Uri(exeFullPath); if (!uri.IsAbsoluteUri) { throw new ArgumentException("必须指定应用程序的完整路径"); } ITaskFolder folder = scheduler.GetFolder("\\"); //获取UserId string userId = GetUserId(); //创建计划任务 ITaskDefinition myTask = scheduler.NewTask(0); myTask.RegistrationInfo.Author = userId; //任务创建者的名字 myTask.RegistrationInfo.Description = taskDesc; //任务描述 myTask.Principal.UserId = userId; myTask.Principal.RunLevel = _TASK_RUNLEVEL.TASK_RUNLEVEL_HIGHEST;//使用最高权限运行 myTask.Settings.RunOnlyIfIdle = false; //创建登陆触发器 ILogonTrigger trigger = (ILogonTrigger)myTask.Triggers.Create(_TASK_TRIGGER_TYPE2.TASK_TRIGGER_LOGON); trigger.UserId = userId;//指定登陆用户 trigger.Enabled = true; //其他设置 myTask.Settings.ExecutionTimeLimit = "PT0S"; //任务运行超时时长:无限 myTask.Settings.MultipleInstances = _TASK_INSTANCES_POLICY.TASK_INSTANCES_IGNORE_NEW; //不允许多实例 myTask.Settings.DisallowStartIfOnBatteries = false; //当使用电池时仍然执行 myTask.Settings.AllowHardTerminate = true; //允许强行终止任务 myTask.Settings.RunOnlyIfNetworkAvailable = false; //取消仅当网络可用时运行 myTask.Settings.AllowDemandStart = true; //允许按需执行 myTask.Settings.Enabled = true; myTask.Settings.WakeToRun = false; //不需要唤醒计算机时运行此任务 //设置操作 IExecAction action = (IExecAction)myTask.Actions.Create(_TASK_ACTION_TYPE.TASK_ACTION_EXEC); action.Path = exeFullPath;//要启动的程序的路径 Console.WriteLine(myTask.XmlText); //注册任务 IRegisteredTask regTask = folder.RegisterTaskDefinition( taskName, myTask, (int)_TASK_CREATION.TASK_CREATE, null, //user null, //password _TASK_LOGON_TYPE.TASK_LOGON_INTERACTIVE_TOKEN, "" ); return(regTask); }
/// <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); }
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; } } }