schtasks.exe与ITaskScheduler

时间:2009-09-25 12:45:05

标签: .net scheduled-tasks

我正在尝试编写一些代码来自动“配置”计算机上的一堆计划任务。程序将读取XML文件,然后根据XML文件中的信息“配置”任务的运行时间等。

这个想法应该是程序可以在机器上多次“运行”并自动“添加/删除”任何有效的更改。我想要这样做的方式如下:

  1. 将使用一些特殊的“前缀”创建所有任务。当程序运行时,它会“删除”具有该前缀的所有任务,因为可以假定它们已由具有不同早期配置的程序运行。

  2. 然后程序“创建”新任务。

  3. 所以我的“配置”程序需要能够

    1. 获取计算机上所有现有计划任务的列表
    2. 按名称删除任务
    3. 按名称创建新任务
    4. 如果我能用C#编写程序,那将是最简单的。

      我似乎有两种方法可以做到这一点:

      1. C#程序使用适当的命令行参数显式运行“schtasks.exe”程序。它“读取”并解析schtasks.exe的输出以获取现有任务的列表,以便它可以删除它们。然后再次运行schtasks.exe以创建新任务。

      2. 通过.NET COM包装器使用ITaskManager接口以编程方式查询和安排任务。

      3. 我更愿意选择#2,但我怀疑这是“更老”的功能 - 我在网上可以找到的内容暗示自Windows NT以来任务管理器功能有所改进。

        schtasks.exe只是在ITaskManager COM接口上编写的命令行工具吗?或者有什么schtasks.exe可以做的事情,ITaskManager接口没有?

        ITaskManager接口/ COM组件是否在Scheduled tasks文件夹中生成“.job”文件?

2 个答案:

答案 0 :(得分:2)

Windows Vista中引入了新的Task Scheduler 2.0,您可以使用ITaskService接口来访问它。我相信Schtasks.exe是基于该API构建的。

为了向后兼容,TS 1.0 ITaskScheduler API仍然有效。那么使用哪一个取决于您需要定位的操作系统版本以及是否需要TS 2.0的新功能。

答案 1 :(得分:2)

我使用此库取得了一些成功:http://www.codeproject.com/KB/cs/tsnewlib.aspx

它似乎在内部使用ITaskScheduler COM接口并公开了我需要的功能。

感谢Mattias的快速回答(upvoted)。