当我安排任务Windows 任务计划程序,我可以在任务触发器内或“设置”选项卡内设置“如果运行时间超过则停止任务”。
如果我在触发器内部设置它,它不会自动填充到设置中,所以我认为它是不同的,但是有什么区别,哪一个更好用?
答案1
我认为@sajawikio 说得对 - 每个触发器的“停止任务”选项允许您设置多个触发器,每个触发器都有自己的最大运行时间限额,其中“设置”选项卡上的选项全局适用于任务的所有实例。
示例:在一项任务上,我设置了多个触发器。一个是每周一午夜运行,另一个是每周四午夜运行。有两种方法(实际上还有更多方法,但我们在这里只使用“停止任务...”选项)可以设置任务,这样就不会出现重叠。
我可以将整个任务(在“设置”选项卡下)的最大运行时间为 3 天。这可以以最简单的方式防止任务重叠。
我可以为每个任务分别设置最大运行时间(在“触发器”对话框中)。星期一的任务将设置为 3 天,星期四的任务将设置为 4 天。这样,星期四的任务就可以多运行一天(如果需要的话),同时仍可防止重叠。
如果此选项设置为两个都触发器屏幕和设置选项卡?这需要进行一些测试,但有三种可能性:
- 每个触发器选项完全覆盖全局选项。
- 全局选项完全覆盖每个触发器的选项。
- 为当前任务设置的最短持续时间获胜。
我查看了帮助文件,没有看到任何关于此问题的说明。为了使您的任务以可靠且可预测的方式执行,我建议您选择其中一种方法 - 切勿同时使用这两种方法。
答案2
感谢@Iszi 的回答。我在我的电脑上测试了这两个“ExecutionTimeLimit”选项并得到了这样的结论。我的电脑的操作系统是 Windows 10 Professional。
从MSDN 文档,我们可以看到这些选项都是在一些COM接口中,这些接口的实现需要桌面Windows版本高于或等于Windows Vista。
结论如下(时间跨度以分钟为单位):
+----------------------------+---------------------------------+-----------------+
| Trigger.ExecutionTimeLimit | TaskSettings.ExecutionTimeLimit | Realistic Limit |
+----------------------------+---------------------------------+-----------------+
| 4 | 3 | 4 |
| 1 | 3 | 1 |
| Not Set | 3 | 3 |
| 1 | Not Set | INFINITE |
+----------------------------|---------------------------------+-----------------+
顺便说一句:任务间隔是每 5 分钟启动一次新任务实例,因此在上述大多数测试用例中它们不会重叠。
从结果来看,我只能说:
如果两个选项都设置了,则触发器中的选项将生效,而设置中的选项将被绕过。
如果仅设置了设置中的选项,则它将会生效。
如果仅设置了 Trigger 中的选项(未设置 ITaskSetting::ExecutionTimeLimit),则没有选项生效,任务调度系统永远不会尝试终止任务,无论任务运行多长时间。
因此,如果您希望系统自动尝试终止运行时间过长的任务,您至少应该启用“ExecutionTimeLimit”选项任务设置.如果您还在任务的特定触发器中启用了该选项,则触发器的选项将取代任务设置中的选项,并对该触发器启动的任务生效。