特集

.NETアプリケーション自動更新技術の比較

市川 龍太(Microsoft MVP 2005 − Solutions Architect)
2005/11/12
Page1 Page2 Page3

●.NET Application Updaterコンポーネント

 マイクロソフトが提供している自動更新用のコンポーネントとしては、.NET Application Updaterコンポーネント(以下AppUpdater)がある。

 これはもともと、テラリウムと呼ばれる一種のシミュレーション・ゲーム(詳細は「Windows Forms .NET: .NET Terrarium」を参照)での自動更新用にJamie Cool氏によって開発されたものだ。故にAppUpdaterはマイクロソフトの正式なプロダクトというわけではないのだが、自動更新のための機能がコンポーネントとしてまとめられており、導入も比較的簡単になっている。ちなみにAppUpdaterはWebDAVを使ったダウンロード方式を採用している(WebDAVについては「次世代プロトコルWebDAVの可能性」を参照)。

 以下では、AppUpdaterの実際の利用例を解説していく。なお本稿ではVisual Studio .NET 2003(以下VS.NET)とC#を使用することを前提とする。AppUpdater自体は、以下のページの冒頭にある[Download the .NET Application Updater Component]というリンクから入手できる。配布されているファイルはZIPファイルになっているのでそれを解凍し、得られたredistフォルダをApplication Updater Componentなどの適当な名前に変更して任意のパスに配置する。

  • Windows Forms .NET: .NET Application Updater Component

  • サンプル・アプリケーションの作成

    1. AppUpdaterを利用する前に、まず更新対象となるサンプルのWindowsアプリケーションをSampleApplicationUpdaterComponentという名前で作成し、AssemblyInfo.csファイルでバージョン(AssemblyVersion属性)を1.0.0.0に設定する。

    2. .AppUpdaterは構成設定をVS.NETのデザイン・ビューで行うため、ツールボックスを右クリックして[アイテムの追加と削除]からAppUpdaterコンポーネント(具体的には入手したAppUpdaterを配置したフォルダ直下のAppUpdater\bin\Releaseフォルダ内にあるAppUpdater.dll)を登録する。

    3. 2で登録したAppUpdaterコンポーネントをフォーム上にドラッグ&ドロップして追加した後、各プロパティを以下の表のように設定する。

プロパティ 設定値
AutoFileLoad True
ChangeDetectionMode ServerManifestCheck
ShowDefaultUI True
UpdaterUrl http://localhost/SampleApplicationUpdaterComponentServer/Version.xml
AppUpdaterの設定値変更の一覧
表に記述されている以外のプロパティはデフォルト値のまま変更しない。

 次にクライアント側とサーバ側にて、それぞれ以下のように設定する。

クライアント側セットアップ

  1. 任意のパス(ここではC:\)にSampleApplicationUpdaterComponentClientフォルダを作成する。

  2. AppUpdaterを配置したフォルダ直下のAppStart\bin\ReleaseフォルダにあるAppStart.exeを1で作成したSampleApplicationUpdaterComponentClientフォルダに配置する。AppUpdaterはアプリケーションを起動するためのランチャとしてこのAppStart.exeを利用するため、必ず配置する必要がある。

  3. AppStart.exeと同じSampleApplicationUpdaterComponentClientフォルダにクライアント用の構成ファイルとして、以下のように記述したAppStart.configを配置する。

    <Config>
      <AppFolderName>1.0.0.0</AppFolderName>
      <AppExeName>SampleApplicationUpdaterComponent.exe</AppExeName>
    </Config>
    AppStart.configの記述例

  4. 最後にSampleApplicationUpdaterComponentClientフォルダ直下に1.0.0.0フォルダを作成し、アプリケーション本体であるSampleApplicationUpdaterComponent.exeとAppUpdater.dllを配置する。

■サーバ側セットアップ

  1. \InetPub\WWWRoot(IISの既定のホーム・ディレクトリ)直下にSampleApplicationUpdaterComponentServerフォルダを作成し、さらにその直下に1.0.0.0フォルダを作成する。

  2. SampleApplicationUpdaterComponentServerフォルダ直下にサーバの構成ファイルとして、以下のような内容のVersion.xmlを配置する。

    <VersionConfig>
      <AvailableVersion>1.0.0.0</AvailableVersion>
      <ApplicationUrl>
        http://localhost/SampleApplicationUpdaterComponentServer/1.0.0.0/
      </ApplicationUrl>
    </VersionConfig>
    Version.xmlの記述例

  3. [コントロール パネル]−[管理ツール]から「インターネット インフォメーション サービス」を起動し、SampleApplicationUpdaterComponentServerフォルダのプロパティを開き[ディレクトリ]タブの中にある「ディレクトリの参照」チェック・ボックスをONにする。

  4. 最後に1.0.0.0フォルダに最初に作成したサンプル・アプリケーションのSampleApplicationUpdaterComponent.exeを配置する。この際日本語OS環境ではmscorlib.resources.dllとSystem.resources.dllの2つのリソース・アセンブリ・ファイルがないとエラーが発生するため、ダミーとして同じ名前のファイルを配置する(ダミー・ファイルを作成するには、空のテキスト・ファイルをリネームすればよい)。

 以上でセットアップは終了である。後はクライアント側セットアップの2で配置したAppStart.exeをクリックすると、サンプル・アプリケーションを実行できる。

 次にAppUpdaterによる自動更新機能を試してみよう。

 ここではまず、サンプル・アプリケーションのAssemblyInfo.csファイルのバージョンを2.0.0.0に設定し(さらに分かりやすいようにフォームのBackColorプロパティなどを変更して)再ビルドを行う。

 そして、上記サーバ側セットアップの1で作成したSampleApplicationUpdaterComponentServerフォルダ直下に新しく2.0.0.0フォルダを作成し、先ほどと同じくサーバ側セットアップの2で配置したVersion.xmlのAvailableVersionタグとApplicationUrlタグの「1.0.0.0」という文字列部分を「2.0.0.0」にそれぞれ変更する。さらにmscorlib.resources.dllとSystem.resources.dllのダミー・ファイルを作成する。

 以上で自動更新のための準備は完了だ。ここで先ほど作成した1.0.0.0版のサンプル・アプリケーションを起動し、そのままの状態でしばらく待機していると(待機する時間はデフォルトで30秒だが、この時間はAppUpdaterのPoller.PollIntervalプロパティの設定値によって決まる)、次のような更新確認のダイアログが表示される。

AppUpdaterコンポーネントの更新確認ダイアログ
サーバ側のVersion.xmlとファイルの更新を行うだけで、クライアント側のアプリケーションが更新を検知して、アプリケーションの更新をユーザーに促すためのダイアログを表示する。

 このまま[Yes]ボタンをクリックすると、自動的に2.0.0.0版のサンプル・アプリケーションに更新される。

【.NET Application Updaterコンポーネントを利用するメリット】

  • VS.NETのデザイン機能を利用して簡単に自動更新機能を実装できる

  • クライアントのセキュリティ・ポリシーを変更する必要がない。CASによるセキュリティ制限が適用されず、完全に信頼されたアプリケーションとして稼働する

  • オフラインでの実行が可能

【.NET Application Updaterコンポーネントを利用するデメリット】

  • 事前に初期バージョンのアプリケーションをクライアントに配置しておく必要がある

  • WebDAVを利用したダウンローダーしか存在しない。ただしソース・コードが公開されているためカスタマイズは可能

  • 構成ファイルの設定を行うツールが提供されていない

  • マイクロソフトのプロダクトではないため、公式にサポートされない

●Updater Application Block 2.0

 Updater Application Block(以下UAB)は、Patterns & Practicesで公開されている自動更新処理用のコンポーネントである。

 UABには、Enterprise Library(以下EntLib。詳細は「連載:Enterprise Library概説」を参照)と呼ばれるフリーのクラス・ライブラリ・セットに対応した2.0版(2005年3月リリース)と、非対応の1.0版が存在しているが、ここではEntLibに対応した2.0版(以下UAB2.0)を取り上げる。

 UAB2.0における自動更新では、ダウンロード処理にBITS(Background Intelligent Transfer Service:バックグラウンド・インテリジェント転送サービス)と呼ばれるHTTPプロトコルを利用した非同期ダウンロードによって更新処理を行う。

 BITSはバックグラウンドで余っているネットワーク帯域を利用するため、ネットワーク負荷への影響を最小限に抑えることができ、さらに何らかのトラブルによってダウンロードが中断されてしまっても、再度接続したときにリジューム(再開)が可能である(BITSの詳細については「バックグラウンド インテリジェント転送サービス (BITS) の概念」を参照)。

 UAB2.0は構成管理ツールが提供されているとはいえ、ほかの配布方式と比べると複雑な作りになっているため、本稿では利用手順の紹介は割愛し、ここではメリットとデメリットをまとめるだけにとどめておく。

 なおUAB2.0の詳細については、既述した「連載:Enterprise Library概説」にて近日中に解説する予定である。

【Updater Application Block 2.0を利用するメリット】

  • 更新対象となるファイルの選択が可能。自動更新処理の構成管理用にGUIツールが提供されている

  • クライアントのセキュリティ・ポリシーを変更する必要がない。CASによるセキュリティ制限が適用されず、完全に信頼されたアプリケーションとして稼働する

  • Activation Processと呼ばれる、更新処理の後に実行されるプロセスを実行可能

  • オフラインでの実行が可能

  • UAB2.0をWindowsサービスとして登録することが可能。Webサーバ上の指定されたファイルを常に監視し、更新があった場合はアプリケーション側へ通知することができる

【Updater Application Block 2.0を利用するデメリット】

  • 事前に初期バージョンのアプリケーションをクライアントに配置しておく必要がある

  • BITSを利用したダウンローダーしか存在しない。ただしソース・コードが公開されているためカスタマイズは可能

  • BITSを使用してダウンロードするので、Windows 98/Meでは利用できない(Windows 2000以降が必要)

  • マイクロソフトのプロダクトではないため、公式にサポートされない


 INDEX
  [特集] .NETアプリケーション自動更新技術の比較
    1. ノータッチ・デプロイメント、Assembly.LoadFromメソッド
  2. .NET Application Updaterコンポーネント、Updater Application Block 2.0
    3. ClickOnce、各自動更新技術の比較
 


Insider.NET フォーラム 新着記事
  • 第2回 簡潔なコーディングのために (2017/7/26)
     ラムダ式で記述できるメンバの増加、throw式、out変数、タプルなど、C# 7には以前よりもコードを簡潔に記述できるような機能が導入されている
  • 第1回 Visual Studio Codeデバッグの基礎知識 (2017/7/21)
     Node.jsプログラムをデバッグしながら、Visual Studio Codeに統合されているデバッグ機能の基本の「キ」をマスターしよう
  • 第1回 明瞭なコーディングのために (2017/7/19)
     C# 7で追加された新機能の中から、「数値リテラル構文の改善」と「ローカル関数」を紹介する。これらは分かりやすいコードを記述するのに使える
  • Presentation Translator (2017/7/18)
     Presentation TranslatorはPowerPoint用のアドイン。プレゼンテーション時の字幕の付加や、多言語での質疑応答、スライドの翻訳を行える
@ITメールマガジン 新着情報やスタッフのコラムがメールで届きます(無料)
- PR -

注目のテーマ

業務アプリInsider 記事ランキング

本日 月間
ソリューションFLASH