如何使用Task Scheduler Managed Wrapper/Schtasks.exe创建禁用时区同步的计划任务
我来帮你搞定这个需求!不管是用Task Scheduler Managed Wrapper还是原生的schtasks.exe,都能轻松创建未勾选「跨时区同步」的计划任务,具体操作如下:
使用Task Scheduler Managed Wrapper实现
这个封装库已经把任务计划的API做了友好封装,「跨时区同步」对应的是触发器的SynchronizeAcrossTimeZones属性,默认值就是false(也就是未勾选状态),如果要确保万无一失,显式设置这个属性即可。
举个C#的代码示例:
using TaskScheduler; // 初始化任务服务 using (var ts = new TaskService()) { // 创建新的任务定义 var taskDefinition = ts.NewTask(); taskDefinition.RegistrationInfo.Description = "示例任务:未启用跨时区同步"; // 创建一个每日触发器(也可以是其他类型的触发器) var dailyTrigger = new DailyTrigger(); dailyTrigger.StartBoundary = DateTime.Today.AddHours(10); // 每天10点执行 dailyTrigger.SynchronizeAcrossTimeZones = false; // 明确禁用跨时区同步 // 将触发器添加到任务定义 taskDefinition.Triggers.Add(dailyTrigger); // 添加执行动作(这里示例是打开记事本) taskDefinition.Actions.Add(new ExecAction("notepad.exe")); // 注册任务到任务计划库 ts.RootFolder.RegisterTaskDefinition(@"MyCustomTask", taskDefinition); }
这段代码创建的任务,打开任务计划程序查看的话,「跨时区同步」选项肯定是未勾选的。
使用schtasks.exe实现
原生命令行工具schtasks.exe默认创建的任务也是不启用跨时区同步的,但如果需要彻底确认,或者要通过命令行显式控制,可以借助XML模板来实现:
- 导出参考XML模板:先手动创建一个临时任务,然后导出它的XML配置:
schtasks /query /tn "TempTestTask" /xml > task_template.xml - 修改XML配置:打开导出的
task_template.xml,找到触发器对应的<Trigger>节点,确保里面包含<SynchronizeAcrossTimeZones>false</SynchronizeAcrossTimeZones>(如果没有这个元素,直接添加到<Trigger>节点内即可,因为默认值就是false,显式添加更稳妥)。 - 基于XML创建任务:用修改后的XML创建目标任务:
schtasks /create /tn "MySchtaskTask" /xml "task_template.xml"
另外要注意:如果你的触发器是基于特定时区的,只要不主动启用跨时区同步,任务就会按照本地时区执行,不会随时区变更自动调整时间。
内容的提问来源于stack exchange,提问作者micram
相关产品推荐
相关产品推荐

