简单描述一个c程序的运行步骤(C创建任务到Windows任务计划程序)

相信有看过我上一篇《C# 定时任务之windows任务计划程序》并且有需求的朋友已经打开过任务计划程序去尝试了,同时是否有了另一个疑问。里面已经存在的任务是怎么来的呢?能否通过我们自己的程序去创建呢?答案当然是可以的!本篇我们来实现一下

简单描述一个c程序的运行步骤(C创建任务到Windows任务计划程序)(1)

这里我们会用到taskschd.dll这个dll,可以从网上下载,也可以在电脑C:\Windows\System32查找到(一般都可以,如果不缺失的话),然后引用到我们的项目中,并将嵌入互操作类型改为false

实现功能:

添加任务到Windows任务计划程序

开发环境:

开发工具: Visual Studio 2013

.NET Framework版本:4.5

实现代码:

/// <summary> /// 添加Windows任务计划 /// </summary> /// <param name="taskName">任务名称</param> /// <param name="exePath">执行程序路径</param> /// <param name="interval">计划任务执行的频率 /// https://docs.microsoft.com/en-us/windows/win32/taskschd/repetitionpattern-interval /// </param> /// 在系统C:\Windows\System32找到taskschd.dll并引用到项目中,选中dll将嵌入互操作类型改为false ///更多文档参考 https://docs.microsoft.com/en-us/windows/win32/taskschd/task-scheduler-start-page static void AddWinTask(string taskName, string exePath, string interval) { TaskSchedulerClass scheduler = new TaskSchedulerClass(); scheduler.Connect(); ITaskFolder folder = scheduler.GetFolder("\\"); //获取所有Task IRegisteredTaskCollection tasks = folder.GetTasks(1); //判断该Task是否已存在 bool isExists = false; for (int i = 1; i < tasks.Count; i ) { if (tasks[i].Name.Equals(taskName)) { isExists = true; break; } } //如果已存在则先删除 if (isExists) { folder.DeleteTask(taskName, 0); } //创建新的Task ITaskDefinition task = scheduler.NewTask(0); task.RegistrationInfo.Description = taskName; // IDailyTrigger、IMonthlyTrigger、IEventTrigger ITimeTrigger triger = (ITimeTrigger)task.Triggers.Create(_TASK_TRIGGER_TYPE2.TASK_TRIGGER_TIME); //执行间隔 triger.Repetition.Interval = interval; //任务开始时间(第一次执行时间) triger.StartBoundary = DateTime.Now.ToString("yyyy-MM-ddTHH:mm:ss"); //指定要执行的程序路径 IExecAction action = (IExecAction)task.Actions.Create(_TASK_ACTION_TYPE.TASK_ACTION_EXEC); action.Path = exePath; //设置参数 action.Arguments = "C#"; //注册任务并开启执行 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); }

//此处直接调用 //每2分钟执行一次 AddWinTask("mytask", @"D:test.exe", "PT2M");

更多的使用方法我已在注释中标明了帮助文档链接。

由简入繁,拿来即用

后续精彩,持续关注

,

免责声明:本文仅代表文章作者的个人观点,与本站无关。其原创性、真实性以及文中陈述文字和内容未经本站证实,对本文以及其中全部或者部分内容文字的真实性、完整性和原创性本站不作任何保证或承诺,请读者仅作参考,并自行核实相关内容。文章投诉邮箱:anhduc.ph@yahoo.com

    分享
    投诉
    首页