[C#] .NET调用Windows Scheduled Tasks 计划任
来源:互联网 发布:用友软件创始人 编辑:程序博客网 时间:2024/05/16 11:37
Windows Scheduled Tasks 计划任务可以定期执行任务,并且可以循环执行,在一些系统中,使用计划任务比我们创建Windows 服务,在其中使用Timer定时器来执行周期性任务更加的方便。微软针对各个系统平台开放了计划任务MSTASK的API,C/C++接口请参看MSDN文档:http://msdn.microsoft.com/zh-cn/library/aa446802。遗憾的是在.NET中并没有对这些接口进行封装,不过在CodePlex上,有开源的计划任务接口封装,详情参考:Task Scheduler Managed Wrapper。
本文将介绍如何使用Windows计划任务的托管的封装接口,请首先下载此项目。
1,创建测试项目
项目添加对Microsoft.Win32.TaskScheduler 的引用:
在Main方法中添加代码,运行根据用户输入执行相应的操作:添加计划任务、查询计划任务的状态、删除计划任务:
using System;
using System.Text;
using Microsoft.Win32.TaskScheduler;
namespace WindowsTaskSchedulerTest
{
class Program
{
static void Main(string[] args)
{
ShowNavigationMsg();
var input = "";
var exit = false;
while (exit == false && string.IsNullOrEmpty(input = Console.ReadKey().KeyChar.ToString().ToLower()) == false)
{
switch (input)
{
case "a":
CreateTestTask();
break;
case "b":
RetrieveTestTask();
break;
case "c":
DeleteTestTask();
break;
case "d":
exit = true;
break;
default:
ShowNavigationMsg();
break;
}
}
}
private static void DeleteTestTask()
{
ShowNavigationMsg();
}
private static void RetrieveTestTask()
{
ShowNavigationMsg();
}
private static void CreateTestTask()
{
ShowNavigationMsg();
}
static void ShowNavigationMsg()
{
Console.WriteLine();
Console.WriteLine("Please choose your action by input a charactor:");
Console.WriteLine("[a]Add Test Task [b]Retrieve Test Task Status ");
Console.WriteLine("[c]Delete Test Task [d]Eixt");
}
}
}
2,创建计划任务
创建计划任务需要使用到以下类:
TaskService-计划任务服务;
TaskDefinition-定义一个计划任务;
DailyTrigger-Trigger中的一种,用于触发计划任务,触发器还包括Weekly、Monthly等等:
// Summary:
// Defines the type of triggers that can be used by tasks.
public enum TaskTriggerType
{
// Summary:
// Triggers the task when a specific event occurs. Version 1.2 only.
Event = 0,
//
// Summary:
// Triggers the task at a specific time of day.
Time = 1,
//
// Summary:
// Triggers the task on a daily schedule.
Daily = 2,
//
// Summary:
// Triggers the task on a weekly schedule.
Weekly = 3,
//
// Summary:
// Triggers the task on a monthly schedule.
Monthly = 4,
//
// Summary:
// Triggers the task on a monthly day-of-week schedule.
MonthlyDOW = 5,
//
// Summary:
// Triggers the task when the computer goes into an idle state.
Idle = 6,
//
// Summary:
// Triggers the task when the task is registered. Version 1.2 only.
Registration = 7,
//
// Summary:
// Triggers the task when the computer boots.
Boot = 8,
//
// Summary:
// Triggers the task when a specific user logs on.
Logon = 9,
//
// Summary:
// Triggers the task when a specific user session state changes. Version 1.2
// only.
SessionStateChange = 11,
}
此枚举对应计划任务中的类型;
ExecAction-执行操作,定义计划任务需要执行的操作;
以及其它相关类。
修改CreateTestTask方法为:
private static void CreateTestTask()
{
// 计划任务服务
TaskService ts = new TaskService();
// 创建一个计划任务
TaskDefinition td = ts.NewTask();
td.RegistrationInfo.Description = "Test Scheduled Task";
td.RegistrationInfo.Author = "Raymond";
//每天启动
Trigger dt = new DailyTrigger{DaysInterval = 1};
//限制计划任务每次执行时间不能超过1小时
dt.ExecutionTimeLimit = TimeSpan.FromHours(1);
dt.StartBoundary = DateTime.Parse("12:00 AM");
//全天重复执行
dt.Repetition.Duration = TimeSpan.FromHours(24);
//每隔30分钟重复一次
dt.Repetition.Interval = TimeSpan.FromMinutes(30);
//将触发器添加到计划任务td的触发器中
td.Triggers.Add(dt);
//创建一个执行操作
var exe = new ExecAction("notepad.exe", "C://test.log", null);
//添加执行操作到计划任务的操作中
td.Actions.Add(exe);
//注册计划任务
ts.RootFolder.RegisterTaskDefinition(@"Test Task", td);
ShowNavigationMsg();
}
运行,输入a后,可以看到计划任务中以及增加了我们添加的计划任务,并且默认以系统账户System运行:
2,查询计划任务状态
修改RetrieveTestTask方法为:
private static void RetrieveTestTask()
{
// 计划任务服务
TaskService ts = new TaskService();
Task t = ts.GetTask(@"Test Task");
if (null != t)
{
Console.WriteLine("Task Name={0}", t.Name);
Console.WriteLine("Task Execution Time={0}", t.LastRunTime);
Console.WriteLine("Task Last Run Result={0}", t.LastTaskResult);
Console.WriteLine("Task Next Execution Time={0}", t.NextRunTime);
}
ShowNavigationMsg();
}
运行输入b,可以得到以下结果:
Please choose your action by input a charactor:
[a]Add Test Task [b]Retrieve Test Task Status
[c]Delete Test Task [d]Eixt
bTask Name=Test Task
Task Execution Time=1/1/0001 12:00:00 AM
Task Last Run Result=0
Task Next Execution Time=1/26/2011 11:30:00 AM
Please choose your action by input a charactor:
[a]Add Test Task [b]Retrieve Test Task Status
[c]Delete Test Task [d]Eixt
除此之外还可以通过Task.Definition 获取添加计划任务时的相关信息以及其它信息。
3,删除计划任务
修改DeleteTestTask方法为:
private static void DeleteTestTask()
{
// 计划任务服务
TaskService ts = new TaskService();
ts.RootFolder.DeleteTask("Test Task");
ShowNavigationMsg();
}
运行输入c,在控制面板的计划任务Scheduled Tasks中,Test Task已经被删除了。
4,其它说明
这个第三方组件,还提供了很多的对象,以及相关的方法,可以让我们方便的对计划任务进行管理,具体请大家在实践中探索,官方也有简单的文档:http://taskscheduler.codeplex.com/documentation
原文:http://hi.baidu.com/1987raymond/blog/item/774a3f4fdd51b425afc3ab80.html
- [C#] .NET调用Windows Scheduled Tasks 计划任
- Uncaught exceptions in scheduled tasks
- task:scheduled-tasks cron表达式
- 如何用命令行操作Windows Scheduled Task (计划任务)?
- windows 调用 计划任务
- Java Spring @Scheduled tasks executing twice
- Spring任务调度 task:scheduled-tasks
- Spring任务调度<task:scheduled-tasks>(定时器)
- Spring Boot之定时调度Scheduled Tasks
- Spring任务调度<task:scheduled-tasks>
- c#.net向windows添加计划任务(task schduler)项
- spring - Scheduling Tasks 计划任务
- Restarting Web Services and Scheduled Tasks with a Batch File
- Running PHP cron jobs – regular scheduled tasks in PHP
- Spring任务调度<task:scheduled-tasks>【含cron参数详解】
- Track your local R scheduled tasks with CommandCenter2000!!!
- Spring任务调度<task:scheduled-tasks>【含cron参数详解】
- Spring任务调度<task:scheduled-tasks>【含cron参数详解】
- VC2005中安装DirectShow
- Public, Private, and Protected Inheritance
- 设置mac应用程序图标
- Flex中TextInput组件用restrict限制某些字符的输入用法
- aspx页面嵌入JS文件不起作用的原因
- [C#] .NET调用Windows Scheduled Tasks 计划任
- SpringLdap访问Ldap服务
- Javascript判断对象是否具有某属性
- 仿智联招聘的多选页面实现
- Network Service
- ognl标签 遍历 在两列显示
- flash 不同swf跳转
- solidworks二次开发 学习日记--3使用solidworks sdk api 和vc做简单开发
- delphi中的指针与C类似