Auf meinem Windows 10-Rechner habe ich die folgende Taskplaner-Aufgabe erstellt und die Auslösezeit auf 1 Minute im Leerlauf eingestellt. Ich habe die Auslösung überprüft und manuell eingestellt und sie wird immer nach 4 Minuten ausgelöst, wenn keine Tastatur- oder Mausaktionen erfolgen, nicht nach 1 Minute. Ich habe die Zeit mehr als 5 Mal manuell eingestellt und sie wird immer nach 4 Minuten ausgeführt, nicht nach 1 Minute. Irgendeine Erklärung? Und wie kann ich sie nach 1 Minute Leerlauf ausführen, nicht nach 4 Minuten? Außerdem wird dieselbe Aufgabe unter Windows 7 überhaupt nicht ausgelöst, wie hier beschriebenhttps://superuser.com/questions/1568707/task-scheduler-on-idle-task-not-triggered-windows-7
Ich habe in den Microsoft-Dokumenten bemerkthttps://docs.microsoft.com/en-us/windows/win32/taskschd/task-idle-conditionsdass da etwas über 4 Minuten steht, aber ich habe es nicht verstanden und ich weiß nicht, ob es damit zusammenhängt oder nicht? Und warum es auf meinem Windows 7-Rechner überhaupt nicht funktioniert.
Unten sehen Sie, wie meine geplante Aufgabe im Aufgabenplaner aussieht:
Hier ist auch die XML meiner Aufgabe:
<?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>
Antwort1
Microsoft hat Windows grundsätzlich so programmiert, dass es sagt: „Ein Computer gilt als im Leerlauf, wenn 4 Minuten lang keine Benutzereingabe generiert wurde.“
Das bedeutet Folgendes: Windows erkennt, dass ein System im Leerlauf ist, ignoriert es aber 4 Minuten lang. Der genaue Grund dafür ist unbekannt, aber es liegt wahrscheinlich an Optimierungsgründen und möglichen Beschwerden. Wenn das System nach 4 Minuten in den Leerlaufzustand wechselt, meldet das Betriebssystem: Das System ist jetzt seit 4 Minuten im Leerlauf und es werden immer mehr ...
Der Taskplaner erhält die Nachricht, sieht Ihren Task, der eingestellt ist, 1 Minute im Leerlauf ist und denkt: Oh, wir hätten Sie vor 3 Minuten starten sollen. Lassen Sie uns Sie jetzt starten. In Windows 7 sind ihm die 3 vorherigen Minuten egal.
Dadurch haben Sie zwei Möglichkeiten.
- Akzeptieren Sie, dass es immer eine Verzögerung von 4 Minuten geben wird
- Verwenden Sie nicht den Taskplaner. Erstellen Sie stattdessen ein Programm oder Skript, das die Aktivität misst, und führen Sie den Task selbst aus. Beachten Sie, dass dies den Systemaufwand erhöht und bei falscher Codierung die Leistung beeinträchtigen kann.
Ich würde Ihnen empfehlen, Option 1 zu wählen. Akzeptieren Sie einfach eine Verzögerung von 4 Minuten. Ihre ursprüngliche Frage bezog sich ohnehin auf 30 Minuten.