UiPath製品群をプロキシ環境で使用するための環境設定手順(UiPath Enterprise版/認証なしプロキシのケース)

さて今回は、地味だけど**UiPathの導入で結構つまずくというか障壁になることが多い、プロキシ接続設定**の話。ぼんやり手元に情報はあったのですが、あらためて網羅的に整理してみました。

## イントロ
UiPath StudioやRobotですが、**気づかないところで結構インターネットに接続**しています。たとえば

- UiPath StudioやRobotが**アクティビティパッケージをダウンロード**するとき
- タスクトレイの(正確にはWindowsサービス) のダイアログからの**UiPath Orchestrator(以下OC)との接続・切断**
- OCと接続しているロボットが「じぶんは生きてるよ」っていうOCへの通信(**Heartbeat**)
- Studioから**ワークフローをOCへパブリッシュ**するとき

などなどです。

例:OCへの「接続」を押したとき
![00.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/73777/43f93527-4998-cde7-8e11-7aa140950def.png)

例:Studioからのパブリッシュをしたとき。
![01.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/73777/04cb174a-8370-1325-3de4-9337d8d72308.png)

ところで、仕事でつかうPCは**インターネットに接続する際プロキシサーバを経由する**のがわりと一般的ですよね。なのでUiPathの製品群も、そのような環境ではプロキシサーバの設定が必要だったりします。

今回は UiPathを使っていて、上記のように**UiPath本体がネット接続する場合のプロキシサーバの設定方法**を整理します。


## この記事の対象の方

- 企業でUiPathやUiPath Orchestratorを導入しようとしていて、自社の環境に導入できるかな？ってきになる方。
- トラブルシューティングなどで、Studio/Robot とOC間の電文をしっかりと確認したい方。
- UiPath Loveな方:-)


## 前提

- UiPath Studio 2019.10.2 Enterprise 版/Orchestrator  2019.10.15 で確認を行いました。
(したがってRobotはユーザモードではなく、**Windowsサービスとして起動**しています)
- 少なくとも今回の記事では**「認証あり」のプロキシについては言及せず、認証なしプロキシの話をします**[^1]。
- 今回の疎通確認においてプロキシサーバは、接続できていることが目視で確認できる [Fiddler](https://www.telerik.com/fiddler)を用いています。
- その Fiddlerが``http://127.0.0.1:8888``で起動していると仮定します。

Fiddlerというプロキシサーバ経由で、UiPath Studioがアクティビティパッケージをダウンロードしている図
![Fiddler.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/73777/9bd1340d-7844-53dc-115b-5eb5e4207bf3.png)


[^1]: 一応「認証あり」プロキシについて言及すると、結論だけいうと認証プロキシの手前に認証なしプロキシ(HttpProxyAuth)を置いて、それに認証処理をやってもらう、という回避方法がありそうです。

## TL;DR

- 大半は「IEの設定」をそのまま引き継ぐようになっているので、設定しなくてもネット接続は可能でした。
- **「OCへの接続/切断 関連」や「Robotのアクティビティパッケージ(nupkg)のダウンロード」「OCへのパブリッシュ」**は、デフォルトでは**IEの設定を引き継がないでダイレクトにネット接続**しようとするので、それらの設定変更は必要。そして、その設定ファイルの編集は**管理者権限**が必要。

## TL;DR(補足)

あ、ちなみに「IEの設定」というのは、いわゆる「インターネットのプロパティ」のことです。
![02.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/73777/d62d1c12-e672-72ff-fbad-546fd300155f.png)

すでにプロキシサーバが導入されていれば、ココにプロキシ設定がされているはずです。UiPath製品群も基本はこの設定を使いますが、OCへの接続・切断など一部の処理は例外ってコトですね。

さて、それら例外たちをプロキシ経由にするには、下記ファイルを編集します[^2]。

- ``C:\Program Files (x86)\UiPath\Studio\UiPath.Service.Host.exe.config``
- ``C:\Windows\SysWOW64\config\systemprofile\AppData\Roaming\NuGet\NuGet.Config``

[^2]: 64bit版のWindowsの場合。32bit版の場合は、それぞれ``C:\Program Files\UiPath\Studio\UiPath.Service.Host.exe.config``,``C:\Windows\System32\config\systemprofile\AppData\Roaming\NuGet\NuGet.Config`` となります。


あ、環境によるかもしれませんが**このファイルを直接ひらいて修正・保存すると、WindowsのVirtualStoreという仕組みにより他のパス``C:\Users\[ユーザ名]\AppData\Local\VirtualStore\Program Files (x86)\UiPath\..`` に保存されたりして**よけいなトラブルに巻き込まれますので、別のフォルダで編集・保存した後エクスプローラでコピー・上書きするようにしてください。

>2019/12/24追記:
>``NuGet.Config`` はココのほかに``C:\Program Files (x86)\UiPath\Studio\``とか``C:\Users\[ユーザ名]\AppData\Roaming\NuGet\`` にもあったりするようです。。今回は文中のファイルの修正が必要でしたが、挙動が異なる場合は他のファイルも試してみてください。


さて、それぞれの記述方法は以下の通り。
まずは ``UiPath.Service.Host.exe.config`` から。

```xml:UiPath.Service.Host.exe.config
...割愛。
  <!--Proxy configuration-->
  <!--
  <system.net>
    <defaultProxy>
      <proxy
        usesystemdefault="true"
        proxyaddress="http://proxy_server:proxy_port"
        bypassonlocal="true"
      />
    </defaultProxy>
  </system.net>
  -->
```

これらのコメントアウト``<!-- -->``をはずし``proxyaddress="http://proxy_server:proxy_port"``を今回は``proxyaddress="http://127.0.0.1:8888"`` と変更します。

つぎに``NuGet.Config`` について。コレはファイル自体が存在しない場合もあるようで(いちどもnupkgを取りにいってないなど)、なかったら適宜つくればよいようです。

```xml:NuGet.Config
<?xml version="1.0" encoding="utf-8"?>
<configuration>
<config>
<add key="http_proxy" value="http://127.0.0.1:8888" /> 
</config>
  <packageSources>
    <add key="nuget.org" value="https://api.nuget.org/v3/index.json" protocolVersion="3" />
  </packageSources>
</configuration>
```

``<config>...</config>`` を追加しました。


最後にWindowsのサービス(Win+R で ``services.msc`` で起動できる)から、UiPath Robot サービスを再起動しておきます。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/73777/74bc818b-de7d-bcdf-6709-752ad623d4a5.png)


**「認証なしプロキシを越えられればイイや」であれば、以上で終了**です。おつかれさまでした。


## 詳細。

わたくしすぐ忘れてしまうので、もうすこし詳細を記載します。

認証なしのプロキシの場合は以上でよいのですが、**認証ありプロキシの場合は、IEの設定をそのまま引き継いでも、プロキシ認証のためのID/Passを入れる場面がない**ので、結局あとでつまづくことになりそうです。

認証ありプロキシの話しはあらためて記事化しますが、今後のため**IEの設定を利用するケースでも、明示的にプロキシ設定できるやり方を整理**しておきます。


### 登場するプログラムたち

さてさて単にネットに接続するといってもケースによって挙動が違うのは、**ウラで動いているプログラムたちが異なっているから**です。そして**それらがそれぞれ設定ファイル**を持っています。

UiPathはプロセスを整理するとおおむね、

- **Windowsサービス(UiPath.Service.Host.exe)** :(サイトより引用)すべての操作の頭脳です。
- **NuGetのプログラム**: アクティビティパッケージのダウンロードを行います
- **UiPath.Executor.exe**: (サイトより引用)プロセスの実行を直接担当するコンポーネントです。
- **UiPath.Agent.exe**: (サイトより引用)Robot の実際のユーザーインターフェースです。
- **UiPath Studio**: 開発ツールです
- **Regutil.exe**: (サイトより引用)マシンをオンラインまたはオフラインでアクティベーションできる簡易コマンドラインツールです。

などが動いています。とってもややこしいですね。
参考: https://docs.uipath.com/robot/lang-ja/docs/introduction

### どのネット接続処理を、どのプログラムがやってるかの例

つづいてそれらのプログラムたちが、どんな(ネット接続をともなう)処理を担当しているか、下記に例を示してみます。あわせてなにも設定しなかったときのデフォルトの挙動(IE設定をみるか、ダイレクト接続するか)も整理しました。


| No | ネット接続をともなう処理| それを実施するプロセス・サービス | 初期状態の挙動|
|----|----------------------------|------------------------------|---------|
| 1  | OCへの接続・切断| UiPath.Service.Host  | ダイレクト |
| 2  | タスクトレイで操作(最新ワークフローのチェックとか)  | UiPath.Service.Host  | ダイレクト   |
| 3  | ハートビート(Heartbeat) | UiPath.Service.Host  | ダイレクト   |
| 4  | StudioからのPublish |UiPath.Service.Host    | ダイレクト   |
| 5  | nupkgのダウンロード(ロボ)(タスクトレイからのnupkgダウンロード)                                                             | NuGetのプログラム                  | ダイレクト|
| 6  | nupkgのダウンロード(Studio)                                                                                                | UiPath Studio(がNuGetを呼んでそう)                    | IE設定を参照                                                   |
| 7  | ワークフロー内のアクティビティのHTTPアクセス(「Orchestrator への HTTP 要求」「HTTP 要求」アクティビティで確認)Studioから実行 | UiPath.Executor                  | IE設定を参照                                                   |
| 8  | 上記ワークフローをタスクトレイから実行                                                                                                   | UiPath.Executor                  | IE設定を参照                                                   |
| 9  | Regutilによるオンラインアクティベーション                                                                                  | Regutil                      | IE設定を参照                                                  |

この初期状態からもわかるとおり ``UiPath.Service.Host``と``NuGetのプログラム``以外はIE設定を参照しているので、**これら二つを明示的に設定変更すれば、プロキシ経由でのアクセスができる**というTL;DRの結論が得られました。


4の**Studioからのパブリッシュを``UiPath.Service.Host``がやっている**のは少し意外でした。**6も、5と同様``NuGet.Config``に依存すると思いましたが、独自で設定をもってそう**でコレも意外。

また``UiPath.Agent``は、明確にネット接続している処理を見つけることができず、従って初期状態でどのような挙動を示すかも不明です。。



### 個別のプログラムが参照する設定ファイル

さて個別のプログラムたちが参照する、設定ファイルもまとめておきます。あ、TL;DR文中の注記にも書きましたが 32bit版Windowsについては微妙にパスが異なりますのでご注意ください。

| No | プロセス・サービス      | プロキシ設定を記述する設定ファイル  | 備考                                                           |
|----|-------------------------|-----------------------------------------------------------------------------|----------------------------------------------------------------|
| 1  | UiPath.Service.Host.exe |  ``C:\Program Files (x86)\UiPath\Studio\UiPath.Service.Host.exe.config``         | サービスの再起動が必要                                           |
| 2  | NuGetのプログラム       |  ``C:\Windows\SysWOW64\config\systemprofile\AppData\Roaming\NuGet\NuGet.Config`` | サービスの再起動が必要                                           |
| 3  | UiPath Studio           | ``C:\Users\[ユーザ名]\AppData\Roaming\NuGet\NuGet.Config``                      | Studioの再起動が必要         |
| 4  | UiPath.Executor.exe     |  ``C:\Program Files (x86)\UiPath\Studio\UiPath.Executor.exe.config``             | サービスの再起動は不要                                         |
| 5  | Regutil.exe             |  ``C:\Program Files (x86)\UiPath\Studio\UiPath\license.config``                  |                                                                |
| 6  | UiPath.Agent.exe        |  ``C:\Program Files (x86)\UiPath\Studio\UiPath.Agent.exe.config``                | (利用シーンがない) |

> 2019/12/24追記:
> 「nupkgのダウンロード(Studio)」時の設定ファイルについて追記しました。


``*.exe.config`` 系の記述方法はすべて同じなので、TL;DRで記述したので個別の編集方法は割愛。``NuGet.Config``もTL;DRで記述したので割愛。

残は``license.config`` ですが[オンラインアクティベーションをするためのプロキシ設定について (Studio / ロボット)](https://www.uipath.com/ja/resources/knowledge-base/proxy-settings-online-activation) に情報がありますが、


```xml:license.config
<SHAFERXMLParams>
<NSAEnabled>1</NSAEnabled>
<NSLEnabled>1</NSLEnabled>
<SecurityValue>15</SecurityValue>
<OfflineMode>0</OfflineMode>
<WorkDir>%PROGRAMDATA%\UiPath\License</WorkDir>
<LicDir>%PROGRAMDATA%\UiPath\License</LicDir>
<LogLevel>0</LogLevel>
<LogQLen>300</LogQLen>
<CacheQLen>25</CacheQLen>
<SoapThreadsMin>10</SoapThreadsMin>
<SoapThreadsMax>10</SoapThreadsMax>
<MaxLogSize>0</MaxLogSize>
<ProxyIP>127.0.0.1</ProxyIP>
<ProxyPort>8888</ProxyPort>
</SHAFERXMLParams>
```

などとすればよいようですね。


## いくつか補足・残件整理

### UiPath.Service.Host.exe.config だけをプロキシ設定するとトラブった

``UiPath.Service.Host.exe.config`` だけをプロキシ設定にしたところ(つまり``NuGet.Config``は修正しない) タスクトレイからのアクティビティパッケージ更新でエラーが。。

下記オペを行うと
![03.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/73777/208c604b-9f7f-6b9a-699b-23c3773d4b57.png)
エラーとなりました。
![04.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/73777/f8a3df44-65f2-526b-c463-06571f622698.png)
詳細を開いてみると、、、
![05.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/73777/79efb8d0-de02-c869-349c-912c0a298076.png)

なんか失敗してます。テストした環境は「プロキシ経由でなくてもダイレクトで繋がる環境」だったので、**ダイレクトにつなぎに行くから接続に失敗した、のではなく「``UiPath.Service.Host.exe.config``を修正すると``NuGet.Config``も修正しないとダメ」** なように見えますね。ご注意です。

ちなみにStackTraceはこんな内容です。

```
パッケージ 'Hello2019_1.1.0.2' のインストールに失敗しました
RemoteException wrapping System.Exception: パッケージ 'Hello2019_1.1.0.2' のインストールに失敗しました
---> RemoteException wrapping System.Exception: NU1101: Unable to find package Hello2019_1. 
No packages exist with this id in source(s): Go!, https://orch.example1.xyz/nuget/activities, 
https://orch.example1.xyz/nuget/feed/default, Local, Microsoft Visual Studio Offline Packages, Official 
```

### UiPath Studio の nupkgダウンロードの制御方法が不明 (→ 解決しました)

先の整理における「nupkgのダウンロード(Studio)」について、初期状態ではIE設定を参照しているわけですが、**プロキシ設定を明示的に設定するための設定ファイルが不明**です。わかる方どなたか教えてください。。。

一応ですがこのオペを行った時に、明示的にプロキシ経由にする設定ファイルの場所が不明ってことです、、。
![studio.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/73777/fbf5a315-57b2-3bb8-5bcb-9cc0429a67c4.png)

> 2019/12/24追記:
> 表には反映しましたが``C:\Users\[ユーザ名]\AppData\Roaming\NuGet\NuGet.Config``でした。


### 環境の差異

UiPathのEditionや、Windowsの32/64bitなど、今回の環境と異なる環境ではいくつか設定箇所・方法について差異がありますので、それらを記述しておきます(必要に応じて記事化します)。

- 32bit版と64bit版のWindowsで設定ファイルのパスが異なっています。
- 今回はUiPathのEnterprise版で確認を行いましたが、Community版のUiPathはインストールパスが異なり、従って設定ファイルのパスも異なります。例:``C:\Users\[ユーザ名]\AppData\Local\UiPath\app-19.10.2(←バージョン)``。
- Enterprise版とCommunity版でRobotのタイプが
    - SCM 管理の Robot サービス (UiPath.Service.Host.exe)
    - ユーザーモードの Robot サービス (UiPath.Service.UserHost.exe)

と異なっています。``UiPath.Service.UserHost.exe`` は再起動の方法が「サービス」でなく「タスクマネージャ」上の終了だったり、Roboがnupkgダウンロード時に参照する``NuGet.config``ファイルの配置場所が``C:\Users\[ユーザ名]\AppData\Roaming\NuGet``だったりなど、設定箇所が若干異なっています。これら、Community Editionの場合の設定方法や、さらに課題の多い認証ありプロキシの場合などは別記事で整理を行います。

以上、おつかれさまでしたー。

## 謝辞

きっかけは、https://github.com/RisaMizushina/UPProxyEnablementKit/releases このツールです。Enterprise/Community 版のUiPathそれぞれについて、設定ファイルを出力してくれるツールです。出力結果を見て、自分が知ってるより多くの設定ファイルを出力していて「あー整理しておく必要あるなー」とおもった次第です。作者の方、感謝いたします！


## 関連リンク

- [Robot をプロキシサーバーからリダイレクトする](https://docs.uipath.com/robot/lang-ja/docs/redirecting-robots-through-a-proxy-server)  コレで全部いけるといえばいけるのですが、、、。基本的な考え方やデフォルト値がわからない。アクティベーション(regutil.exe)は別記事だったり、、。
- [オンラインアクティベーションをするためのプロキシ設定について (Studio / ロボット)] (https://www.uipath.com/ja/resources/knowledge-base/proxy-settings-online-activation)  regutil.exe は(公式の)ナレッジベースで。。
- [LicenseTool コマンドの説明](https://docs.uipath.com/robot/lang-ja/docs/licensetool-command-descriptions) あれ、regutil.exe 廃止？でしたっけ。新ツールのプロキシ設定はココ。
- [UiPath Robot ガイド>>はじめに](https://docs.uipath.com/robot/lang-ja/docs/introduction)  リンク先のさらにリンク先に、サービス、Executor、トレイ、などプロセスの種類が説明されています。
- [UiPath Robot 単独インストールからワークフロー実行までのハンズオン。またプロキシを入れるなど、デバッグに便利なTIPSのご紹介。](https://qiita.com/masatomix/items/13f3239a99c922726224) まえに中途半端に整理していたところを、今回包含して整理できました。
- [UiPath製品群をプロキシ環境で使用するための環境設定手順(UiPath Community版/認証なしプロキシのケース)](https://qiita.com/masatomix/items/5be2a61a594307f5979a) 本記事はEnterprise版についてですが、Community版についての記事。