この記事は「RPA Advent Calendar 2024」の5日目の記事です。
UiPathのジョブが開始したタイミングでデスクトップの録画を開始し、ジョブが終了したら録画も終了する、そんな仕掛けを作りたくて、イベントトリガーについて調べたことを紹介します。
UiPathのRobotサービスについて
ユーザーモードのRobotとサービスモードのRobotの2種類があって、それぞれ有人オートメーションと無人オートメーションに対応しています。有人オートメーションでは、ユーザーモードのRobotサービス(UiPath.Service.UserHost.exe)からExecutor(UiPath.Executor.exe)が起動され、Executorがオートメーションを実行します。これに対して無人オートメーションでは、サービスモードのRobotサービス(UiPath.Service.Host.exe)からExecutor(UiPath.Executor.exe)が起動され、Executorがオートメーションを実行します。
有人オートメーションと無人オートメーションの違いはあっても、Executorがオートメーションを実行することは変わらないので、UiPathのジョブ開始とジョブ終了で処理を実行するためには、Executorのプロセス作成・終了イベントを捕捉することが必要になりました。
Windowsのイベントログについて
イベントビューアーを開いてみると、Windowsのイベントログの種類は、①Application、②セキュリティ、③Setup、④システム、⑤Forwarded Eventdの5つあることが分かります。イベントビューアーを開くには、ショートカットキー「Windows キー + r」で「ファイル名を指定して実行」ウィンドウを開いて、「eventvwr」と入力して[OK]ボタンをクリックします。
Executorのプロセス作成・終了イベントは、②のセキュリティのログに記録されます。
ところが、セキュリティのログの中にも種類(カテゴリー)が沢山あって、プロセス作成・終了イベントは、デフォルトではログに記録されるよう設定されていないんです。プロセス作成・終了イベントをセキュリティのログに記録するためには、監査ポリシーの設定が必要でした。
実行端末で監査ポリシーの設定
監査ポリシーの参照・設定は、コマンドプロンプトを管理者権限で開いて、auditpolコマンドを使って行うことができます。
すべてのカテゴリーについて現在の設定状況を参照するには、以下のように設定します。
auditpol /get /category:*
プロセス作成に成功したときにログ記録するには、以下のように設定します。
auditpol /set /subcategory:"プロセス作成" /success:enable /failure:disable
プロセス終了に成功したときにログ記録するには、以下のように設定します。
auditpol /set /subcategory:"プロセス終了" /success:enable /failure:disable
上記で設定した内容を元に戻したいときは、「enable」の部分を「disable」に書き換えてauditpolコマンドを実行します。
イベントビューアーでログ確認
監査ポリシーの設定が済んだら、UiPathジョブを実行して、プロセス作成・終了イベントがログに記録されることを確認します。イベントビューアーを開いて、[Windowsログ]の中の[セキュリティ]を選択しましょう。
イベントログの1行目を選択して、ショートカットキー「Ctrl キー + f」を押せば、検索ウィンドウが表示しますので、「UiPath.Executor」と入力して[次を検索]ボタンをクリックして、プロセス作成のイベントとプロセス終了のイベントを検索してみましょう。
[イベントID]が4688の行が、プロセス作成のイベントで、[イベントID]が4689の行が、プロセス終了のイベントです。
(1)プロセス作成のイベントログ例
この例では、UiPath.Executeor.exeのファイルパスが、ユーザーのAppDataフォルダになっていますが、UiPathをインストールするときに、ユーザーを指定してインストールしたためです。すべてのユーザーで使えるようにインストールした場合は、「C:\Program Files\UiPath\Studio\UiPath.Executor.exe」になります。
イベントトリガーを作成する
前述した監査ポリシーの設定によって、イベントログには、すべてのアプリケーションの開始と終了のイベントが記録されるようになっています。ここからは、タスクスケジューラーに、UiPath.Executor.exeの開始と終了のイベント発生のときだけ特定の処理を実行するように、イベントトリガーを設定する手順を説明します。
タスクスケジューラーを開くには、ショートカットキー「Windows キー + r」で「ファイル名を指定して実行」ウィンドウを開いて、「taskschd.msc」と入力して[OK]ボタンをクリックします。
イベントトリガー用に新しいフォルダーを作成しましょう。名前は任意ですが、「UiPath Executorイベント」としておけば見分けやすくなります。
(1)プロセス作成イベントトリガーの登録
作成したフォルダで、右クリックして[新しいタスクの作成]をクリックして、ウィンドウを開きます。
「新しいトリガー」ウィンドウで、[タスクの開始]を「イベント時」、[設定]のラジオボタンに「カスタム」を選択したら、[新しいイベントフィルター]をクリックします。
「新しいイベントフィルター」ウィンドウで、[XML]タブを表示し、[手動でクエリを編集する]にチェックを入れます。
編集エリアに下記に示すクエリ定義を入力して、[OK]をクリックします。ただし、UiPath.Executor.exeのパスは、上記「イベントビューアーでログ確認」で説明したのと同様に、実行環境にUiPathをインストールしたときの状況によって変わってきますので、実行環境に合わせて修正が必要です。
<QueryList>
<Query Id="0" Path="Security">
<Select Path="Security">
*[System[(EventID=4688)]]
and
*[EventData[Data[@Name='NewProcessName'] ='C:\Users\(ユーザー名)\AppData\Local\Programs\UiPath\Studio\UiPath.Executor.exe']]
</Select>
</Query>
</QueryList>
「新しい操作」ウィンドウで[プログラム/スクリプト]に実行したいバッチファイルのパスを入力して[OK]ボタンをクリックします。
[全般]タブで[名前]を入力して、[OK]ボタンをクリックしたら登録完了です。
(2)プロセス終了イベントトリガーの登録
プロセス終了イベントについてもトリガーを登録します。クエリ定義は下記の内容を入力します。ここも、上記「(1)プロセス作成イベントトリガー」と同様に、UiPath.Executor.exeのパスは、実行環境に合わせて修正が必要です。
<QueryList>
<Query Id="0" Path="Security">
<Select Path="Security">
*[System[(EventID=4689)]]
and
*[EventData[Data[@Name='ProcessName'] ='C:\Users\(ユーザー名)\AppData\Local\Programs\UiPath\Studio\UiPath.Executor.exe']]
</Select>
</Query>
</QueryList>
あとがき
UiPath Executorのプロセス作成・終了のイベントでバッチ処理を実行するために必要な設定や手順を紹介しました。ここで紹介した内容は、下記Udemy講座で『FFmpeg 録画機能 活用講座「RPAの保守支援ツールを作る」』のコンテンツを作るにあたって調査した内容の一部ですが、Windowsでプロセスの開始・終了をイベントトリガーにするときの設定や手順としては、共通的に使える知識であるため、イベントトリガーの部分のみ抽出して記事にしました。イベントトリガーを利用した実装の際のお役に立つ内容となっていれば幸いです。
関連記事・動画
記事:PCデスクトップをドライブレコーダーのように録画できたら、再現性の低いRPAの不具合原因特定が少しだけ楽になるかも?
動画:Udemy講座『FFmpeg 録画機能 活用講座「RPAの保守支援ツールを作る」』