任务计划程序空闲任务未在正确的时间窗口触发

任务计划程序空闲任务未在正确的时间窗口触发

在我的 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 个选项。

  1. 接受总是会有 4 分钟的延迟
  2. 不要使用任务计划程序。而是创建一个程序或脚本来测量活动并自行启动任务。请注意,如果编码不当,这会增加系统开销,并可能损害性能。

我的建议是选择选项 1。接受 4 分钟的延迟就好。反正你最初的问题是 30 分钟。

相关内容