简单描述一个c程序的运行步骤(C创建任务到Windows任务计划程序)
相信有看过我上一篇《C# 定时任务之windows任务计划程序》并且有需求的朋友已经打开过任务计划程序去尝试了,同时是否有了另一个疑问。里面已经存在的任务是怎么来的呢?能否通过我们自己的程序去创建呢?答案当然是可以的!本篇我们来实现一下
这里我们会用到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