写点什么

在 Vista 和 Windows Server 2008 中使用计划任务程序

  • 2008-03-02
  • 本文字数:1724 字

    阅读完需:约 6 分钟

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

Windows Vista 与即将发布的 Windows Server 2008 提供了一种可能,就是能够创建复杂的任务,使得它们可以在不同时刻及时运行。它还提供了一个很棒的特性,可以通过托管代码访问嵌入到操作系统中的计划任务程序的功能。首先,创建一个 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

2008-03-02 01:083238
用户头像

发布了 109 篇内容, 共 46.5 次阅读, 收获喜欢 14 次。

关注

评论

发布
暂无评论
发现更多内容

敏捷开发 | 张三与需求管理

易成研发中心

敏捷开发 需求管理

微信朋友圈为什么没有阅读数?

彭宏豪95

微信 产品 产品设计

随手记备忘录的好习惯

changyou

回"疫"录(3):让人怀念的普通一天

小天同学

疫情 回忆录 现实纪录 纪实

程序员5分钟:你的程序占用了多少内存?

顾仲贤

程序员

决定我们认知深度的究竟是什么?

石君

深度思考 方法论 连接

最近的一些人生感悟

小智

人生 哲学

Java并发编程系列——线程

孙苏勇

Java 并发编程 线程

程序员5分钟:你了解32位带符号的整型吗?

顾仲贤

程序员

Java并发编程系列插曲——对象的内存结构

孙苏勇

Java 内存模型 面向对象 ClassLayout

前端如何搞监控总结篇

大前端洞见

大前端 监控 全链路监控

克制文章长度

changyou

加班能解决交付的期望么?

拖地先生

项目管理 领导力 管理 时间管理

Golang 真的好用吗?

极客时间

编程语言 Go 语言

小论互联网项目管理

南方

项目管理 互联网 个人成长 碧海潮生曲

知乎开发了一个搜索引擎

红泥

搜索引擎 百度 知乎

程序员陪娃漫画系列——修龙头

孙苏勇

程序员 生活 陪伴 漫画

爱他,就让他走?

Selina

团队管理 领导力 团队协作

我为什么选择infoq写作平台

三爻

漫谈哲学与编程

keelii

编程 哲学

在谈判中,你有哪些属于自己的独特的方法和技巧?

Yolanda

世界知识产权日碎碎念

Yin

成长 随笔 知识产权

别总说CMS、G1,该聊聊ZGC了

猿人谷

CMS G1 ZGC JVM

「超级右键」

非著名程序员

macos 程序员 效率工具 软件 Mac

很不幸,自动化测试永远只能是必要非充分条件

刘华Kenneth

DevOps 敏捷 自动化 测试 金字塔

如何阅读源码?

武培轩

Java 源码 面试 进阶 后端

聊聊苹果公司技术部门的宫斗和冷战

赵钰莹

程序员 外包 apple

除了负载均衡的算法,你还应该知道这些

松花皮蛋me

Java 负载均衡 分布式

基于Kubernetes的多云和混合云

倪朋飞

云计算 架构 Kubernetes 微服务 Service Mesh

程序员陪娃漫画系列——看医生

孙苏勇

程序员 生活 陪伴 漫画

程序员都应该了解的运维知识经验

松花皮蛋me

DevOps 分布式 运维

在Vista和Windows Server 2008中使用计划任务程序_.NET_Abel Avram_InfoQ精选文章