連載
Enterprise Library概説

UpdaterABを使った高度な自動更新機能を実装する

アバナード株式会社 市川 龍太(patterns & practices Champion
2006/01/11
Page1 Page2 Page3 Page4

更新処理を実行する

 以下はConfigurationコンソールとManifestツールで設定した構成を基に、実際に更新処理を行うサンプル・プログラムである。ここではUABを利用するアプリケーションとして、ボタンを1つ配置したWindowsアプリケーション(UpdaterAB.exe)を作成し、ボタンクリック時のイベント・ハンドラ内にサンプル・コードを記述している。

using System;
using System.Drawing;
using System.Collections;
using System.ComponentModel;
using System.Windows.Forms;
using System.Data;
using Microsoft.ApplicationBlocks.Updater;

namespace UpdaterAB
{
  public class Form1 : System.Windows.Forms.Form
  {
    ……中略……
    private void button1_Click(object sender, System.EventArgs e)
    {
      ApplicationUpdaterManager updater =
        ApplicationUpdaterManager.GetUpdater();
      Manifest[] manifests = updater.CheckForUpdates();
      foreach(Manifest m in manifests)
        m.Apply = true;
      updater.Download( manifests, TimeSpan.FromMinutes(1) );
    }
  }
}
UABを使用した場合のサンプル・プログラム(C#)
なおこのサンプル・プログラムを実行するには、(Enterprise Libraryをインストールした「C:\Program Files\Microsoft Patterns & Practices\Updater Application Block 2.0」の「Common」フォルダ内にある)以下のアセンブリを参照設定に追加する必要がある。
・Microsoft.ApplicationBlocks.Updater
・Microsoft.ApplicationBlocks.Updater.Downloaders

 このサンプル・プログラムでは、まず更新処理のコントロールを行うApplicationUpdaterManagerクラスをインスタンス化し、それからCheckForUpdatesメソッドを呼び出すことで更新ファイルが配置されているサーバー側に問い合わせを行い、マニフェスト・ファイルで設定されている構成ををManifestクラスへの配列として取得する。この際Applyプロパティがtrueに設定されたManifestオブジェクトだけがダウンロードの対象となる。最後にApplicationUpdaterManagerオブジェクトのDonwloadメソッドを呼び出すことで実際のダウンロード処理が開始されるのである。Downloadメソッドの第2引数には、ダウンロード処理のタイムアウト時間として1分を指定している。

 このサンプル・プログラムを実行すると更新先フォルダ(本稿の例ではC:\DestFolder)直下に(基本的に)downloader、registryの2つのフォルダが自動生成され、downloaderフォルダ以下にダウンロード対象ファイル(このサンプルではUpdater.txt)が配置される。

UABによってダウンロードされたファイル

 以上でUABによってファイルをダウンロードできるようになった。

Activation Processを実行する

 しかしせっかく更新先フォルダを指定しても、結局自動生成されたdownloaderフォルダ以下にファイルが配置されてしまうのでは、実際の運用時において何かと不都合になることもあるだろう。

 そういう場合には、Activation Processを利用すれば、ファイルの更新処理が行われた後に任意のプロセスを実行することできるようになり、例えばファイルが配置された後に、さらに別のフォルダへファイルをコピーすることなどが行えるようになる。

 次の表は、Activation Processとして実行できる機能の一覧である。

機能 説明
ApplicationDeployProcessor マニフェスト・ファイルに定義されたファイルを配置する
FileCopyProcessor 任意のファイルをコピーする
FileDeleteProcessor 任意のファイルを削除する
FolderCopyProcessor 任意のフォルダをコピーする
FolderDeleteProcessor 任意のフォルダを削除する
MSIProcessor Windows Installer Packages(.msiファイル)を実行する
WaitForApplicationExitProcessor 実行中のアプリケーションが終了するまでActivation Processの実行を待機する
GACUtilProcessor グローバル・アセンブリ・キャッシュ・ツール(gacutil.exe)を実行する
InstallUtilProcessor インストーラ・ツール(InstallUtil.exe)を実行する
UncompressProcessor CAB形式ファイルを展開する
ValidateHashProcessor ダウンロード対象ファイルのハッシュ値とマニフェスト・ファイルに事前に登録してあるハッシュ値を比較し、正しいファイルであることを検証する
Activation Process一覧

 それでは先ほどのサンプル・プログラムでC:\DestFolder以下に配置したファイルを、さらに別のフォルダ(C:\CopyFolder)へコピーする処理を、FileCopyProcessorを使って実装してみよう。

●Manifestツールの「Activation Process」タブにおけるプロパティ設定

 FileCopyProcessorを利用するには、まずManifestツールの[Activation Process]タブを開き、Processor Typeを「File Copy」に設定してからProcessor Nameに任意の名前(本稿の例では「FileCopy」)を入力し、[Add]ボタンを押下する。

 すると[Edit Processor Configuration]ダイアログが表示されるので、以下の画面のように、Sourceにコピー元のファイル名(本稿の例では「Updater.txt」)を設定し、Destinationにコピー先のファイル・パス(本稿の例では「C:\CopyFolder\Updater.txt」)を指定する。[Overwrite]チェックボックスはデフォルトのオンのままでよい。

[Edit Processor Configuration]ダイアログの設定
Manifestツールの[Activation Process]タブで、Processor TypeとProcessor Nameを入力し[Add]ボタンを押すとこのダイアログが表示される。このダイアログでコピー元とコピー先のファイル・パスを指定する。

 ここで[Manifest Properties]タブの[Generate]ボタンを再度押下してManifestIdを再発行しておく必要がある。最後に[Save]ボタンによりマニフェスト・ファイルを保存すれば準備が整う。

 後は以下のように、上記サンプル・プログラムにActivation Processを実行する処理を追加すれば終了である。

private void button1_Click(object sender, System.EventArgs e)
{
  ApplicationUpdaterManager updater =
    ApplicationUpdaterManager.GetUpdater();
  Manifest[] manifests = updater.CheckForUpdates();
  foreach(Manifest m in manifests)
    m.Apply = true;
  updater.Download( manifests, TimeSpan.FromMinutes(1) );
  updater.Activate( manifests );
}
Activation Processを使用した場合のサンプル・プログラム(C#)
太字の個所が上記サンプル・プログラムから変更したコードである。なおこのサンプル・プログラムを実行するには、以下のアセンブリを参照設定に追加する必要がある。
・Microsoft.ApplicationBlocks.Updater.ActivationProcessors.dll

 このサンプル・プログラムを起動して更新処理を実行すると、コピー先フォルダ(C:\CopyFolder)直下にUpdate.txtがコピーされるはずだ。

 ちなみにこれらActivation Processは複数指定することができ、ファイルのコピーが終了した後に更新元フォルダに配置されているファイルを削除するなどの処理を実行することも可能である。


 INDEX
  連載:Enterprise Library概説
  UpdaterABを使った高度な自動更新機能を実装する
    1.ConfigurationコンソールでUABの構成を設定する
    2.Manifestツールでマニフェスト・ファイルを設定する
  3.更新処理とActivation Processを実行する
    4.カスタムDownloaderを作成する
 
インデックス・ページヘ  「Enterprise Library概説」


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