2天时间,聊今年最热的 Agent、上下文工程、AI 产品创新等话题。2025 年最后一场~ 了解详情
写点什么

在 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:083197
用户头像

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

关注

评论

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

小程序生命周期

程序员海军

三周年连更

一文读懂注解的底层原理

老周聊架构

三周年连更

Java Stream常见用法汇总,开发效率大幅提升

程序员大彬

Java java8

Go语言开发小技巧&易错点100例(四)

闫同学

三周年连更

C生万物 | 分支和循环语句【内含众多经典案例】

Fire_Shield

C语言 三周年连更

缓存失效后的解决方案

穿过生命散发芬芳

缓存 三周年连更

Java面向对象编程基础

timerring

Java

优化用户旅程:提升4S店销售管理系统的市场竞争力

L3C老司机

产品 产品设计 数字化 用户旅程 服务蓝图

AI日课@20230413:Prompt Engineering 02 - 原则

无人之路

ChatGPT

本周参加两个SAP项目面试后的感想

SAP虾客

面试 SAP项目 行业经验

【坚果派 - 坚果】OpenHarmony编译命令

坚果

OpenHarmony 三周年征文 三周年连更

Unity 之 Post Processing后处理不同项目配置(UPR项目配置)

陈言必行

Unity 三周年连更

霸榜Github三个月的「架构师成长手册」!成为架构师竟然也有捷径

Java你猿哥

Java 分布式 架构设计 架构师 SSM框架

京东面试题:说说synchronized和volatile的区别

Java volatile JMM synchronized

Django笔记九之model查询filter、exclude、annotate、order_by

Hunter熊

Python django alias annotate order_by

盘点一下市面上常见的八种光纤接头,网络工程师你知道几个?

wljslmz

三周年连更

Java并行流:一次搞定多线程编程难题,让你的程序飞起来!

Java你猿哥

Java 多线程 SSM框架 java 并发

终于拿到了爆火全网的进一线大厂程序员必看的1700道java面试题

Java java面试 Java八股文 Java面试题 Java面试八股文

第五元素奏鸣曲:企业的新数据之道

脑极体

数据

用情景领导力帮助团队管理-1

搬砖的周狮傅

2023-4-13 某SAP项目面试小记

SAP虾客

SAP EWM SAP Ariba SAP Workflow SAP PM

SpringBoot中如何解决Redis的缓存穿透、缓存击穿、缓存雪崩?

硬核!阿里P8自爆春招面试核心手册,Github上获赞65.7K

Java java面试 Java八股文 Java面试题 Java面试八股文

糟了,生产环境数据竟然不一致,人麻了!

冰河

MySQL 数据库 数据一致性 数据存储

Intent的基本使用

芯动大师

组件 intentservice 三周年连更

鲲鹏DevKit原生开发,效率倍增使能极简开发

乌龟哥哥

鲲鹏 DevKit 三周年连更

一个强大的go生产力工具,极大的提高开发效率、缩短开发项目时间和人工成本

vison

微服务 gRPC Go 语言 gin 代码自动生成

API渗透测试之漏洞发现

阿泽🧸

三周年连更

深度分析:SpringBoot中自定义starter实例与原理

Java你猿哥

spring Spring Boot SSM框架 Spring boot starter test

终于拿到了阿里技术专家分享的552页大型网站架构实战文档

Java 架构 网站架构

Spring 事务及传播机制原理详解

Java spring 事务

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