プロキシ環境でのClickOnce

今回、お客様の端末がWindows7になってClickOnceでのインストール、バージョンアップができない(起動もできない)という現象が発生。
プロキシ認証環境での不具合に関してはWebに情報がいくつか出ているが、今回の現象は特にプロキシ認証に起因してはいないようだ。


ClickOnceは主にイントラ内使用を想定しているんだろうか。
インターネット経由の配布を想定しているのであればプロキシは当たり前のように使われているはず。
プロキシの設定(直指定、スクリプト指定、自動検出)によってデフォルトの状態で動作しないのであれば導入されないと思うんだけど。。。
うまく情報を探せない自分の問題もあるのだが、MSはもう少しこのへん整理した情報を出してほしいところ。
(まあインターネット経由で社内で使用するアプリを配布するのが特殊といえばそうかもしれないけど)


当初想定としては、.net frameworkに対して、IE設定を使用するような指定をすれば動くだろう、という位の認識でいたのだが、なかなか大変な作業となった。
割りとはまったので以下メモ。


お客様環境は、ブラウザのプロキシ設定で「自動構成スクリプトを使用する」が選択され、スクリプトのURLが設定されている状況。
デフォルトでは.net環境では、ブラウザのプロキシ設定が使用される*1ということだが、上記環境では設定されない事が判明。
とりあえず、自動構成スクリプトをみて、取得されるであろうプロキシサーバを明示的に指定してバージョンアップを行うよう対応し、暫定版として通常のインストーラで入れてもらうことで凌ぐことに。


その後、自動構成スクリプトから動的にプロキシを取得するよう対応すれば、ClickOnceでいけるだろうと踏んで対応を開始。

  • .ブラウザのプロキシ設定が自動構成スクリプト指定の場合、動的にプロキシサーバを取得できない。

 →http://www.codeproject.com/Articles/12168/Using-PAC-files-proxy
  ここのコードを参考にして、プロキシ設定情報を取得し、デフォルトプロキシサーバを指定。
  プロキシ設定スクリプトのURLはレジストリ(Software\Microsoft\Windows\CurrentVersion\Internet Settings\AutoConfigURL)から取得。
  (結果としてデフォルトプロキシ設定はClickOnceには関係なかったが、アプリ側でHTTP通信する際のProxy設定として必要な対応だったようだ。)
  

  • .ClickOnceでのインストール時、WebRequest.DefaultWebProxyで指定したプロキシ設定が利用されない

 →http://msdn.microsoft.com/ja-jp/library/system.deployment.application.inplacehostingmanager.aspx
 ここを参考に、InPlaceHostingManagerを使用してインストールするためのプロジェクトを作成し、インストーラとする。(ただし、インストールしたアプリを起動はできないので、インストール後スタートメニューから起動してもらう)
 その際、Installer、SetUpなどを含む名前だとインストーラとみなされて、プログラム互換性アシスタントに、正しくインストール出来なかった可能性があるとか言われてしまうため、避ける。
 バージョンアップの時は、デフォルトプロキシを設定してからバージョンアップ(CurrentDeployment.CheckForUpdate()、Update())すれば今までは動作していたけど、カスタムインストーラでインストールした場合、TrustNotGrantedExceptionが発生してしまう。
 なので、バージョンアップ時にも、通常のClickOnceのバージョンチェック、更新は使用せず、InPlaceHostingManagerを使用してバージョンチェック、Updateをするように対応。


設定を自動的に検出する、WPADの場合は社内に環境が無いのでまだ未検証。
おそらく動的にプロキシ取得するのでダメだと思う。お客様環境によってはこちらも検証、対応しなければ。
しかしインターネット経由でClickOnceを導入してる人はみんなカスタムインストーラで対応しているんだろうか。。。謎だ。
(自分が上手く情報を探せていないだけかもしれないけど・・・)

今のところ、大体うまく動いているようだ。(一部問題がある端末もあるみたい。。。うーん)