UiPath Executorのプロセス作成・終了のイベントでバッチ処理を実行する

この記事は「RPA Advent Calendar 2024」の5日目の記事です。
UiPathのジョブが開始したタイミングでデスクトップの録画を開始し、ジョブが終了したら録画も終了する、そんな仕掛けを作りたくて、イベントトリガーについて調べたことを紹介します。
# UiPathのRobotサービスについて
ユーザーモードのRobotとサービスモードのRobotの２種類があって、それぞれ有人オートメーションと無人オートメーションに対応しています。有人オートメーションでは、ユーザーモードの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の５つあることが分かります。イベントビューアーを開くには、ショートカットキー「Windows キー + r」で「ファイル名を指定して実行」ウィンドウを開いて、「eventvwr」と入力して[OK]ボタンをクリックします。﻿
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/128425/f2177894-26de-2225-4183-b05351b17eb0.png)
Executorのプロセス作成・終了イベントは、②のセキュリティのログに記録されます。
ところが、セキュリティのログの中にも種類（カテゴリー）が沢山あって、プロセス作成・終了イベントは、デフォルトではログに記録されるよう設定されていないんです。プロセス作成・終了イベントをセキュリティのログに記録するためには、監査ポリシーの設定が必要でした。

# 実行端末で監査ポリシーの設定
監査ポリシーの参照・設定は、コマンドプロンプトを管理者権限で開いて、auditpolコマンドを使って行うことができます。
すべてのカテゴリーについて現在の設定状況を参照するには、以下のように設定します。
```:管理者:コマンドプロンプト
auditpol /get /category:*
```
プロセス作成に成功したときにログ記録するには、以下のように設定します。
```:管理者:コマンドプロンプト
auditpol /set /subcategory:"プロセス作成" /success:enable /failure:disable
```
プロセス終了に成功したときにログ記録するには、以下のように設定します。
```:管理者:コマンドプロンプト
auditpol /set /subcategory:"プロセス終了" /success:enable /failure:disable
```
上記で設定した内容を元に戻したいときは、「enable」の部分を「disable」に書き換えてauditpolコマンドを実行します。

# イベントビューアーでログ確認
監査ポリシーの設定が済んだら、UiPathジョブを実行して、プロセス作成・終了イベントがログに記録されることを確認します。イベントビューアーを開いて、[Windowsログ]の中の[セキュリティ]を選択しましょう。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/128425/ff1906f2-a7c0-4173-1544-e67860925688.png)
イベントログの１行目を選択して、ショートカットキー「Ctrl キー + f」を押せば、検索ウィンドウが表示しますので、「UiPath.Executor」と入力して[次を検索]ボタンをクリックして、プロセス作成のイベントとプロセス終了のイベントを検索してみましょう。
<img width="300" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/128425/04c85b66-8283-f5ff-e89f-02c3ea1354d4.png">

[イベントID]が4688の行が、プロセス作成のイベントで、[イベントID]が4689の行が、プロセス終了のイベントです。
（１）プロセス作成のイベントログ例
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/128425/98e70d0c-302e-680e-4985-45cc8836c2f8.png)
この例では、UiPath.Executeor.exeのファイルパスが、ユーザーのAppDataフォルダになっていますが、UiPathをインストールするときに、ユーザーを指定してインストールしたためです。すべてのユーザーで使えるようにインストールした場合は、「C:\Program Files\UiPath\Studio\UiPath.Executor.exe」になります。

（２）プロセス終了のイベントログ例
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/128425/cf35a9df-a023-5d1b-9b06-1f9aee47d4b3.png)

# イベントトリガーを作成する
前述した監査ポリシーの設定によって、イベントログには、すべてのアプリケーションの開始と終了のイベントが記録されるようになっています。ここからは、タスクスケジューラーに、UiPath.Executor.exeの開始と終了のイベント発生のときだけ特定の処理を実行するように、イベントトリガーを設定する手順を説明します。
タスクスケジューラーを開くには、ショートカットキー「Windows キー + r」で「ファイル名を指定して実行」ウィンドウを開いて、「taskschd.msc」と入力して[OK]ボタンをクリックします。﻿

<img width="400" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/128425/ddb7f93e-3d79-16ae-7fcc-98e9267f0935.png">

イベントトリガー用に新しいフォルダーを作成しましょう。名前は任意ですが、「UiPath Executorイベント」としておけば見分けやすくなります。
<img width="410" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/128425/56cc7a64-9f0c-6313-0f3e-7320089697b7.png">

### （１）プロセス作成イベントトリガーの登録
作成したフォルダで、右クリックして[新しいタスクの作成]をクリックして、ウィンドウを開きます。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/128425/4a101e67-6298-7ab1-db64-230d3de24db0.png)

「タスクの作成」ウィンドウで[トリガー]タブを開きます。
<img width="540" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/128425/4e9d1230-2160-ed9f-dd77-c66aa0d15584.png">

[新規]をクリックします。
<img width="540" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/128425/93af331a-3aa8-175b-94a1-0d139a1b1028.png">

「新しいトリガー」ウィンドウで、[タスクの開始]を「イベント時」、[設定]のラジオボタンに「カスタム」を選択したら、[新しいイベントフィルター]をクリックします。
<img width="500" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/128425/30fce56e-be51-02f0-b266-559fb0f7b798.png">

「新しいイベントフィルター」ウィンドウで、[XML]タブを表示し、[手動でクエリを編集する]にチェックを入れます。
<img width="500" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/128425/7893d6bb-f802-9d52-08ae-4c2adc8d38a9.png">

確認ダイアログが表示するので、[はい]をクリックします。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/128425/3c0068bf-d9b6-a3a6-f4b0-641444425770.png)

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/128425/363e37e5-45ac-d64b-9b4d-ae8acab095d9.png)

編集エリアに下記に示すクエリ定義を入力して、[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>
```

次に、[操作]タブで[新規]をクリックします。
<img width="500" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/128425/0a1cf406-9f65-1701-3fad-0469b8c560eb.png">

「新しい操作」ウィンドウで[プログラム/スクリプト]に実行したいバッチファイルのパスを入力して[OK]ボタンをクリックします。
<img width="500" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/128425/c9f94f83-4830-c6d6-259b-04f1794053bc.png">

[全般]タブで[名前]を入力して、[OK]ボタンをクリックしたら登録完了です。
<img width="500" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/128425/b6d720e4-f2f0-0b29-14df-a37c588f9be1.png">

### （２）プロセス終了イベントトリガーの登録
プロセス終了イベントについてもトリガーを登録します。クエリ定義は下記の内容を入力します。ここも、上記「（１）プロセス作成イベントトリガー」と同様に、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でプロセスの開始・終了をイベントトリガーにするときの設定や手順としては、共通的に使える知識であるため、イベントトリガーの部分のみ抽出して記事にしました。イベントトリガーを利用した実装の際のお役に立つ内容となっていれば幸いです。

### 関連記事・動画
:page_facing_up:記事：[PCデスクトップをドライブレコーダーのように録画できたら、再現性の低いRPAの不具合原因特定が少しだけ楽になるかも？](https://qiita.com/maohara/private/37912714b5b9fc0338e4)
:movie_camera:動画：[Udemy講座『FFmpeg 録画機能 活用講座「RPAの保守支援ツールを作る」』](https://www.udemy.com/course/ffmpeg-rpa/?referralCode=FC181CDC4A0FA50A582F)