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