タスク スケジューラ アイドル タスクが正しい時間枠でトリガーされない

タスク スケジューラ アイドル タスクが正しい時間枠でトリガーされない

私の 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 つのオプションがあります。

  1. 常に4分の遅延があることを受け入れる
  2. タスク スケジューラは使用しないでください。代わりに、アクティビティを測定するプログラムまたはスクリプトを作成し、タスクの起動を自分で実行します。これによりシステムのオーバーヘッドが増加し、不適切にコーディングされた場合はパフォーマンスが低下する可能性があることに注意してください。

私の推奨はオプション 1 を選択することです。4 分間の遅延があることを受け入れてください。いずれにしても、最初の質問は 30 分でした。

関連情報