再次使用任务计划程序。
在 Windows 7 下,任务按照链接中所述的规则运行...经过测试并且有效。
在 Windows 10(Pro v1809 包含所有更新)下...嗯,不完全是。
首先,这两个任务(在 Windows 7 和 Windows 10 下)是相同的。任务创建如下:
如果我在 14:15 复制一些文件,并在 14:15 移动鼠标,并在 14:15 在键盘上打字,然后在 14:15 离开电脑,我希望任务在 15:15 执行而不是在 14:30 执行,还是我错了?
该任务总是在 14:30 执行(如果我在 14:25 将计算机开到最大),或者如果我在 14:30 在计算机上工作,则该任务根本不执行(就当天而言)。WTF?如果我在装有 Windows 7 的计算机上重新创建该任务,一切都会正常。
这是在 2 台不同的 Windows 7 电脑和 3 台不同的 Windows 10 电脑上测试的。这里的数字并不重要,因为同样的事情发生在 02:00,空闲时间为 15 分钟,等待时间为 2 小时。它们在这里只是为了描绘正在发生的事情。
我甚至认为这与 Windows 10 中的“工作时间”有某种联系,工作时间设置在 06:00 到 00:00 之间,所以我将任务移到了 14:30......是的,这没有帮助。
是的,我确实知道 Windows 10 对空闲时间的看法与 Windows 7 不同,但这意味着任务将在稍后执行,而不是更早执行,尤其是不会在设置触发器时执行。
如果有人可以证实这种行为并提供一些解释为什么会发生这种情况,我会很感兴趣。
2019 年 5 月 13 日。- 现在我可以肯定地证实这一点。今天我的两个朋友证实了这个问题。这一定是 Windows 10 v1809 中的一个错误(也许早期版本也有,但我无法访问它们)。我还可以确认这在 Windows 7 机器上没有问题。太好了,太棒了。我会在 Microsoft 论坛上发布这个问题。
2019 年 5 月 15 日。- 设法在 Windows 10 v1607 上测试了这一点... 同样的事情发生了。怎么可能没有人(两年多来)向微软报告过这个问题?这不可能是它应该有的行为方式,这显然是 Windows 10 中的一个错误。
答案1
您是否尝试过使用空闲状态改为触发器?据我所知,任务空闲条件仅用于此触发器。
我创建了一个测试任务 - 如下所示。每次计算机空闲时,它将在 1 分钟后执行。为了测试它,我只是使用Win + L
快捷方式锁定了 Windows 屏幕。计算机锁定后 1 分钟内,任务就执行了。
测试Task.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-05-12T18:21:43.6698729</Date>
<Author>nsm</Author>
<URI>\Test Task</URI>
</RegistrationInfo>
<Triggers>
<IdleTrigger>
<ExecutionTimeLimit>PT4H</ExecutionTimeLimit>
<Enabled>true</Enabled>
</IdleTrigger>
</Triggers>
<Principals>
<Principal id="Author">
<UserId>S-1-5-18</UserId>
<RunLevel>HighestAvailable</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>PT1H</WaitTimeout>
<StopOnIdleEnd>true</StopOnIdleEnd>
<RestartOnIdle>false</RestartOnIdle>
</IdleSettings>
<AllowStartOnDemand>true</AllowStartOnDemand>
<Enabled>true</Enabled>
<Hidden>false</Hidden>
<RunOnlyIfIdle>true</RunOnlyIfIdle>
<WakeToRun>false</WakeToRun>
<ExecutionTimeLimit>PT4H</ExecutionTimeLimit>
<Priority>7</Priority>
</Settings>
<Actions Context="Author">
<Exec>
<Command>C:\Projects\StackOverflow\cmd\testidletask.cmd</Command>
</Exec>
</Actions>
</Task>
测试空闲任务.cmd:
@echo off
for /f "tokens=*" %%i in ('date /T') do set DATE=%%i
for /f "tokens=*" %%a in ('time /T') do set TIME=%%a
echo %DATE% %TIME% >>C:\Projects\StackOverflow\cmd\testidletask.log