在我的 Windows 10 机器中,我创建了以下任务计划程序任务,并将触发时间设置为空闲时 1 分钟。我已检查并手动计时触发器的发生时间,它总是在没有键盘或鼠标操作的 4 分钟后触发,而不是 1 分钟。我手动计时超过 5 次,它总是在 4 分钟后运行,而不是 1 分钟。有什么解释吗?我如何在空闲时间 1 分钟而不是 4 分钟后运行它?此外,正如这里所述,相同的任务在 Windows 7 上根本不会触发https://superuser.com/questions/1568707/task-scheduler-on-idle-task-not-triggered-windows-7
我注意到微软文档https://docs.microsoft.com/en-us/windows/win32/taskschd/task-idle-conditions它说了大约 4 分钟,但我不明白,也不知道这是否相关?以及为什么它在我的 Windows 7 机器上根本不起作用。
以下是我的计划任务在任务计划程序中的样子:
这是我的任务的 xml:
<?xml version="1.0" encoding="UTF-16"?>
<Task version="1.2" xmlns="http://schemas.microsoft.com/windows/2004/02/mit/task">
<RegistrationInfo>
<Date>2019-11-20T15:43:06.6081219</Date>
<Author>MyPC\MyUser</Author>
<URI>\MyAppIdleTask</URI>
</RegistrationInfo>
<Triggers>
<IdleTrigger>
<Enabled>true</Enabled>
</IdleTrigger>
</Triggers>
<Principals>
<Principal id="Author">
<UserId>S-1-5-21-1004336348-1177238915-682003330-385281</UserId>
<LogonType>InteractiveToken</LogonType>
<RunLevel>LeastPrivilege</RunLevel>
</Principal>
</Principals>
<Settings>
<MultipleInstancesPolicy>IgnoreNew</MultipleInstancesPolicy>
<DisallowStartIfOnBatteries>true</DisallowStartIfOnBatteries>
<StopIfGoingOnBatteries>true</StopIfGoingOnBatteries>
<AllowHardTerminate>true</AllowHardTerminate>
<StartWhenAvailable>false</StartWhenAvailable>
<RunOnlyIfNetworkAvailable>false</RunOnlyIfNetworkAvailable>
<IdleSettings>
<Duration>PT1M</Duration>
<WaitTimeout>PT0S</WaitTimeout>
<StopOnIdleEnd>true</StopOnIdleEnd>
<RestartOnIdle>false</RestartOnIdle>
</IdleSettings>
<AllowStartOnDemand>true</AllowStartOnDemand>
<Enabled>true</Enabled>
<Hidden>false</Hidden>
<RunOnlyIfIdle>true</RunOnlyIfIdle>
<WakeToRun>false</WakeToRun>
<ExecutionTimeLimit>PT72H</ExecutionTimeLimit>
<Priority>7</Priority>
</Settings>
<Actions Context="Author">
<Exec>
<Command>C:\MyWinFormApp\MyWinForm.exe</Command>
</Exec>
</Actions>
</Task>
答案1
微软对 Windows 的编程基本上是这样的:如果 4 分钟内没有生成任何用户输入,则计算机被视为空闲。
这意味着:Windows 开始检测到系统处于空闲状态,但会忽略它 4 分钟。具体原因尚不清楚,但可能是出于优化原因和可能的投诉。当系统在 4 分钟后进入空闲状态时,操作系统会宣布:系统现在空闲了 4 分钟,并且还在继续……
任务计划程序收到消息,看到您的任务已设置,空闲了 1 分钟,然后想:哦,我们应该在 3 分钟前启动它。现在就启动它。在 Windows 7 中,它不关心之前的 3 分钟。
这为您提供了 2 个选项。
- 接受总是会有 4 分钟的延迟
- 不要使用任务计划程序。而是创建一个程序或脚本来测量活动并自行启动任务。请注意,如果编码不当,这会增加系统开销,并可能损害性能。
我的建议是选择选项 1。接受 4 分钟的延迟就好。反正你最初的问题是 30 分钟。