ICode9

精准搜索请尝试: 精确搜索
首页 > 系统相关> 文章详细

C#创建windows任务计划程序2种方法(兼容win7、win10)

2021-05-31 10:35:52  阅读:565  来源: 互联网

标签:TASK string C# win7 windows task new taskName null


一:NuGet中搜索包:Microsoft.Win32.TaskScheduler并引用:

        public static void RunTaskService(string vbsRootPath)
        {
            string taskName = "HelperTray1";
            TaskService ts = new TaskService();
            Microsoft.Win32.TaskScheduler.Task wsTask = ts.GetTask(taskName);
            if (wsTask == null)
            {


                string vbsStart = Path.Combine(vbsRootPath, "Start.vbs");//ApiConfig.ExtPath

                TaskDefinition td = ts.NewTask();
                td.RegistrationInfo.Description = taskName;

                //开机后2分钟开始运行任务
                //td.Triggers.Add(new BootTrigger { Delay = new TimeSpan(0, 2, 0) });

                //参数1 Interval 间隔:每次重新启动任务之间的时间量。允许的最长时间为31天,允许的最短时间为1分钟
                //参数2 Duration 持续时间:重复模式的持续时间。允许的最短时间是一分钟。如果指定了TimeSpan.Zero,则该模式将无限期地重复。
                //参数3:获取或设置一个布尔值,该值指示正在运行的任务实例在重复模式持续时间结束时停止。
                RepetitionPattern repetition = new RepetitionPattern(new TimeSpan(0, 1, 0), TimeSpan.Zero, true);
                td.Triggers.Add(new DailyTrigger { Repetition = repetition });

                td.Actions.Add(new ExecAction("wscript.exe", vbsStart, null));
                ts.RootFolder.RegisterTaskDefinition(taskName, td);
            }
        }

二、在系统C:\Windows\System32 下查找DLL:taskschd.dll并引用到项目中:

        public static void CreateTaskScheduler(string vbsRootPath)
        {
            try
            {
                LogEvent.LogInfo.Fatal("2创建计划任务:1");
                string taskName = "HelperTray2";
                TaskSchedulerClass scheduler = new TaskSchedulerClass();
                //pc-name/ip,username,domain,password
                scheduler.Connect(null, null, null, null);
                ITaskFolder folder = scheduler.GetFolder("\\");
                IRegisteredTask rt = null;
                try
                {
                    //搜索不到会抛异常
                    rt = folder.GetTask(taskName);
                    if (rt != null)
                        return;
                }
                catch(Exception ex)
                {
                    LogEvent.LogInfo.Info("任务计划程序不存在,创建:");
                }
                
                LogEvent.LogInfo.Fatal("2创建计划任务:2");

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

                //set trigger  (IDailyTrigger ITimeTrigger) 设置小时/分/秒来实现
                //  ITimeTrigger tt = (ITimeTrigger)task.Triggers.Create(_TASK_TRIGGER_TYPE2.TASK_TRIGGER_TIME);
                //  tt.Repetition.Interval = interval;// format PT1H1M==1小时1分钟 设置的值最终都会转成分钟加入到触发器
                //设置每天特定的时间来实现 
                IDailyTrigger tt = (IDailyTrigger)task.Triggers.Create(_TASK_TRIGGER_TYPE2.TASK_TRIGGER_DAILY);
                tt.StartBoundary = string.Format("1970-05-01T{0}:00:00", "04");
                tt.EndBoundary = string.Format("2100-05-01T{0}:00:00", "04");
                //tt.Repetition= new RepetitionPattern
                //start time //set action
                IExecAction action = (IExecAction)task.Actions.Create(_TASK_ACTION_TYPE.TASK_ACTION_EXEC);
                action.Path = "wscript.exe";
                string vbsStart = Path.Combine(vbsRootPath, "HelperStart.vbs");//ApiConfig.ExtPath
                action.Arguments = vbsStart;//运行程序时需要的参数,如果没有可以不写。
                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, null, _TASK_LOGON_TYPE.TASK_LOGON_INTERACTIVE_TOKEN, "");
                IRunningTask runTask = regTask.Run(null);
                //return runTask.State;
                LogEvent.LogInfo.Fatal("2创建计划任务:3");
            }
            catch (Exception ex)
            {
                LogEvent.LogInfo.Fatal("创建计划任务异常:"+ex);
                //throw ex; 
            }
        }

 

标签:TASK,string,C#,win7,windows,task,new,taskName,null
来源: https://www.cnblogs.com/xytmj/p/14830312.html

本站声明: 1. iCode9 技术分享网(下文简称本站)提供的所有内容,仅供技术学习、探讨和分享;
2. 关于本站的所有留言、评论、转载及引用,纯属内容发起人的个人观点,与本站观点和立场无关;
3. 关于本站的所有言论和文字,纯属内容发起人的个人观点,与本站观点和立场无关;
4. 本站文章均是网友提供,不完全保证技术分享内容的完整性、准确性、时效性、风险性和版权归属;如您发现该文章侵犯了您的权益,可联系我们第一时间进行删除;
5. 本站为非盈利性的个人网站,所有内容不会用来进行牟利,也不会利用任何形式的广告来间接获益,纯粹是为了广大技术爱好者提供技术内容和技术思想的分享性交流网站。

专注分享技术,共同学习,共同进步。侵权联系[81616952@qq.com]

Copyright (C)ICode9.com, All Rights Reserved.

ICode9版权所有