タスク スケジューラで使用している 2 つの実行エンジンについて

こんにちは。Windows プラットフォーム サポートの丸山です。

今回は、Windows 8 および Windows Server 2012 以降のタスク スケジューラでお問い合わせの多い、UBPM と呼ばれる実行エンジンの注意事項についてご紹介させていただきます。

■ タスク スケジューラで使用されている 2 つの実行エンジンについて

Windows 7、および Windows Server 2008 R2 以降のタスク スケジューラでは、従来の実行エンジンと合わせて、Unified Background Process Manager (UBPM) と呼ばれる実行エンジンが利用されるようになりました。

しかしながら、弊社では、UBPM を利用して起動されるタスクの動作が、従来の実行エンジンで動作するタスクとは違った動作をすることが確認されております。

本ブログでは、UBPM 利用時における注意点について、弊社問い合わせ事例などを紹介させていただきます。

■ 実行エンジンの違いによる問い合わせ事例について

UBPM を利用して実行されるタスクでは、従来の実行エンジンと比較して以下のような動作の違いが報告されております。

(1) "タスクの実行時に使うユーザー アカウント" に "ユーザーがログオンしているかどうかにかかわらず実行する" が選択されている場合、"最上位の特権で実行する" のチェックが外れていても常に最上位の特権で動作します。

管理者ユーザーを利用して、以下のようにタスクを設定した場合、従来の実行エンジンではユーザー アカウント制御 (UAC) の機能により制限された権限でタスクが動作しますが、UBPM では完全な権限でタスクが動作します。

a

従来の実行エンジンで実行されたタスクは制限された権限でタスクが動作しています。
b

UBPM で実行されたタスクは完全な権限でタスクが動作しています。
c

(2) タスクを開始するまでのコンピューターのアイドル時間は無視されます。

タスクの実行条件として "タスクを開始するまでのコンピューターのアイドル時間" を設定した場合、従来の実行エンジンでは指定された時間アイドル状態が継続された場合にタスクが実行されますが、UBPM ではトリガーが成立するとタスクがすぐに実行されることが報告されております。
d

■ タスクの実行エンジンを見分ける方法について

タスクが従来の実行エンジンで実行されているか、UBPM で実行されているかどうかを見分けるには、以下のような方法があります。

(1) 親プロセスが svchost.exe であるか、taskeng.exe であるか

UBPM で実行されているタスクは svchost.exe が親プロセスとなります。
従来の実行エンジンで実行されているタスクは taskeng.exe が親プロセスとなります。
e

(2) タスクの履歴に ID 319 のイベントが記録されるかどうか

従来の実行エンジンで起動されるタスクは、タスクの履歴にイベント ID 319 が記録されます。
UBPM で実行されているタスクはタスクの履歴にイベント ID 319 が記録されません。
f

■ タスクを 従来の実行エンジンで実行するには

タスクの以下のような設定変更を行うことで、タスクの実行エンジンが従来のタスクエンジンに切り替わることを確認しております。

(1) "タスクがすでに実行中の場合に適用される規則" を "既存のインスタンスを停止する" に変更する。

以下のように、タスクの設定画面にて "タスクがすでに実行中の場合に適用される規則" を "既存のインスタンスを停止する" に変更すると、当該タスクは従来のタスク エンジンで実行されるようになります。
g

弊社のお問い合わせ事例におきましても、タスクの実行エンジンの違いにより問題が発生していることが疑われる場合には、UBPM で実行されるタスクを従来の実行エンジンで実行するよう設定を変更する、または従来の実行エンジンで実行されているタスクを UBPM で実行するよう設定を変更する。といった切り分けをご提案させていただくことがございます。

本ブログの注意事項で記載した事象が発生しました場合には、タスクの実行エンジンを切り替え、状況が変わるかどうかをご確認いただけますと幸いです。

■ 最後に

タスクスケジューラーで新たに使用されるようになった UBPM は便利な機能ですが、扱いには注意が必要です。
弊社では、UBPM をご利用時の注意事項について、本ブログを積極的に更新していきたいと思います。
今後ともどうぞよろしくお願いします