C#添加设置任务计划(基于Windows7)


计划任务程序是Windows

Vista以及Windows7中一个很有用的附件。本文是一篇快速教程,讲解了如何在托管代码中使用计划任务程序。若要了解更多的详细解释,敬请访问Bart De
Smet相应的博客文章。

Windows
Vista与Windows7提供了一种可能,就是能够创建复杂的任务,使得它们可以在不同时刻及时运行。它还提供了一个很棒的特性,可以通过托管代码访问嵌入到操作系统中的计划任务程序的功能。首先,创建一个C#控制台应用程序,然后从System32文件夹中导入taskschd.dll文件。它将会创建计划任务程序的COM互操作程序集。然后,像这样创建一个TaskSchedulerClass对象:

TaskSchedulerClass scheduler = new TaskSchedulerClass();

接下来连接scheduler对象:

TaskSchedulerClass scheduler = new
TaskSchedulerClass();
scheduler.Connect(null, null, null, null);

下一步是创建一个任务,并设置它具有的大量属性:

ITaskDefinition task = scheduler.NewTask(0);
task.RegistrationInfo.Author
= "Author";
task.RegistrationInfo.Description = "New
Task";
task.Settings.RunOnlyIfIdle = true;

下面是选择任务应该启动的时刻。方法就是通过触发器。我们的范例使用了一个每日触发的触发器,如下所示:

IDailyTrigger trigger =
(IDailyTrigger)task.Triggers.Create(_TASK_TRIGGER_TYPE2.TASK_TRIGGER_DAILY);
trigger.Id
= "DailyTrigger";
trigger.StartBoundary =
"2008-01-01T12:00:00";
trigger.EndBoundary = "2008-01-31T12:00:00";

当触发器中设置的条件满足要求时,任务就会运行。但是必须定义动作(action),否则任务什么都不会做。这是一个范例:

IEmailAction action =
(IEmailAction)task.Actions.Create(_TASK_ACTION_TYPE.TASK_ACTION_SEND_EMAIL);
action.Id
= "Email action";
action.Server = "server...";
action.From
= "sender...";
action.To = "recipient...";
action.Subject = "The
subject of the email...";
action.Body = "The body text of the email...";

该任务几乎随时可以使用,仅仅需要对其进行注册。

ITaskFolder folder = scheduler.GetFolder("\\Task");
IRegisteredTask regTask =
folder.RegisterTaskDefinition(
   
"Test",
    task,
   
(int)_TASK_CREATION.TASK_CREATE_OR_UPDATE,
    null,
//user
    null, // password
   
_TASK_LOGON_TYPE.TASK_LOGON_INTERACTIVE_TOKEN,
    "");

任务一旦完成并被注册,就能够立即运行,如下所示,或者使用“schtasks /run”。

IRunningTask runTask = regTask.Run(null);

将这些代码集中在一起,则结果为:

using System;
using System.Collections.Generic;
using System.Text;

namespace TaskScheduler {
    class Program
{
        static void Main (string[] args)
{
           
TaskSchedulerClass scheduler = new
TaskSchedulerClass();
           
scheduler.Connect(null, null, null, null);

           
ITaskDefinition task =
scheduler.NewTask(0);
           
task.RegistrationInfo.Author =
"Author";
           
task.RegistrationInfo.Description = "New
Task";
           
task.Settings.RunOnlyIfIdle = true;

           
IDailyTrigger trigger =
(IDailyTrigger)task.Triggers.Create(_TASK_TRIGGER_TYPE2.TASK_TRIGGER_DAILY);
           
trigger.Id =
"DailyTrigger";
           
trigger.StartBoundary =
"2008-01-01T12:00:00";
           
trigger.EndBoundary = "2008-01-31T12:00:00";

           
IEmailAction action =
(IEmailAction)task.Actions.Create(_TASK_ACTION_TYPE.TASK_ACTION_SEND_EMAIL);
           
action.Id = "Email
action";
           
action.Server =
"server...";
           
action.From =
"sender...";
           
action.To =
"recipient...";
           
action.Subject = "The subject of the
email...";
           
action.Body = "The body text of the email...";

           
ITaskFolder folder = scheduler.GetFolder("\\Task");
           
IRegisteredTask regTask =
folder.RegisterTaskDefinition(
                
"Test",
                
task,
                
(int)_TASK_CREATION.TASK_CREATE_OR_UPDATE,
                
null,
//user
                
null, //
password
                
_TASK_LOGON_TYPE.TASK_LOGON_INTERACTIVE_TOKEN,
                
"");

           
IRunningTask runTask =
regTask.Run(null);
       
}
    }
}

查看英文原文:Using the Task Scheduler in Vista and Windows Server 2008

 http://www.infoq.com/news/2008/02/TaskScheduler
【作者 Abel
Avram 译者 张逸 http://www.infoq.com/cn/news/2008/03/TaskScheduler

 
 
 


免责声明!

本站转载的文章为个人学习借鉴使用,本站对版权不负任何法律责任。如果侵犯了您的隐私权益,请联系本站邮箱yoyou2525@163.com删除。



 
粤ICP备18138465号  © 2018-2025 CODEPRJ.COM