私の Windows 10 マシンでは、以下のタスク スケジューラ タスクを作成し、アイドル状態のときにトリガー時間を 1 分に設定しました。トリガーの発生を確認して手動でタイミングを計ったところ、キーボードやマウスの操作がないときは常に 1 分ではなく 4 分後にトリガーされます。手動で 5 回以上タイミングを計りましたが、常に 1 分ではなく 4 分後に実行されます。説明はありますか? また、アイドル状態の 4 分ではなく 1 分後に実行するにはどうすればよいですか? また、同じタスクは、ここで説明されているように、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/タスクアイドル条件約 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
Microsoft は基本的に、Windows を次のようにプログラムしました: 4 分間ユーザー入力が生成されなかった場合、コンピューターはアイドル状態であるとみなされます。
これは次のことを意味します: Windows はシステムがアイドル状態であることを検出し始めますが、4 分間それを無視します。正確な理由は不明ですが、おそらく最適化上の理由と苦情の可能性が考えられます。システムが 4 分後にアイドル状態になると、OS は次のようにアナウンスします: システムは現在 4 分間アイドル状態であり、カウント中です...
タスク スケジューラはメッセージを受け取り、設定されているタスクを確認し、1 分間アイドル状態になって、「ああ、3 分前に開始しておくべきだった。今すぐ開始しましょう」と考えます。Windows 7 では、前の 3 分間は考慮されません。
これには 2 つのオプションがあります。
- 常に4分の遅延があることを受け入れる
- タスク スケジューラは使用しないでください。代わりに、アクティビティを測定するプログラムまたはスクリプトを作成し、タスクの起動を自分で実行します。これによりシステムのオーバーヘッドが増加し、不適切にコーディングされた場合はパフォーマンスが低下する可能性があることに注意してください。
私の推奨はオプション 1 を選択することです。4 分間の遅延があることを受け入れてください。いずれにしても、最初の質問は 30 分でした。