Lesson 4 アップグレードとモジュラー化

3. パッチワーク

更新しなければならない小さなファイルが一つか二つ混じっているというだけの理由で、 何メガバイトものファイルを入れたアップグレード・インストーラ・パッケージを作ることは、あまり効率的だとは言えないでしょう。 従来から、そういう場合には、いつでも、パッチの方が良い解決策でした。 パッチは、基本的には旧バージョンと新バージョンの異なる部分を入れたもので、 ユーザーのコンピュータにある古いファイルを魔法のごとく自動的に新しいものに変えることが出来るものです。 パッチ・パッケージには新規に配置するファイルを入れることも出来ます。

WiX ツールセットもパッチ・インストーラ・パッケージ (.msp ファイル) を作成することが出来ます。 パッチ・インストーラ・パッケージは、二つの通常のインストーラ・パッケージ (一つは、バグのある古いファイルを持つ元のパッケージ、もう一つは、修正されたファイルを持つ新しいパッケージ) から作成されます。 ダウンロードできる SamplePatch の中には、 ユーザー・インタフェイスを持たない非常に簡単な二つのインストーラ・パッケージが入っています。 両方ともファイルを一つだけインストールしますが、そのファイルが元のバージョンとパッチを当てられたバージョンで変ります。 ソース・ファイルの詳細は、もう今では、完全に見慣れたものになっている筈です。 Error.wxsFixed.wxs のソース・ファイルの唯一の違いは、Source のファイルの参照だけです。

訳註:SamplePatch の日本語版は Sample-4-3-Patch.zip です。

<File Id='HogeEXE' Name='HogeAppl10.exe' DiskId='1'
      Source='Error\HogeAppl10.exe' KeyPath='yes' />

対するに、

<File Id='HogeEXE' Name='HogeAppl10.exe' DiskId='1'
      Source='Fixed\HogeAppl10.exe' KeyPath='yes' />

パッチは第三のソース・ファイルから作成されます。 これは、前と全く同じように、XML ファイルですが、その内容は今まで書いたファイルとは異なるものです。

<?xml version='1.0' encoding='utf-8'?>
<Wix xmlns='http://schemas.microsoft.com/wix/2006/wi'>
  <Patch AllowRemoval='yes' Manufacturer='ぴよソフト'
      MoreInfoURL='www.piyosoft.co.jp' DisplayName='ほげ 1.0.0 パッチ'
      Description='小さな更新パッチ' Classification='Update'
      Codepage='932'>

    <Media Id='5000' Cabinet='Sample.cab'>
      <PatchBaseline Id='Sample' />
    </Media>

    <PatchFamily Id='SamplePatchFamily' Version='1.0.0.0'
        Supersede='yes'>
      <ComponentRef Id='MainExecutable' />
    </PatchFamily>

  </Patch>
</Wix>

Classification 属性は、Hotfix, Security Rollup, Critical Update, Update, Service Pack または Update Rollup のどれかです。 AllowRemoval は、ユーザーが後でパッチをアンインストールすることが出来るかどうかを決定します。 PatchFamily タグが、パッチを適用される項目を包み込んでいます。 そして、Supersede は、このパッチが同じファミリーに属する以前のすべてのパッチに取って代るものであるか否かを決定します。

ビルド作業は以前のプロジェクトよりも少し複雑になります。 最初に、ベースになる二つのパッケージを通常の方法でビルドします。二つとも、それ自身のフォルダに入れます。

candle.exe Error.wxs
light.exe -out Error\Product.msi Error.wixobj

candle.exe Fixed.wxs
light.exe -out Fixed\Product.msi Fixed.wixobj

次に、別の WiX ツール、torch を使って、二つのインストーラ・パッケージの間のトランスフォームを作成します。 コマンド・ラインの引数で、プログラムに対して、Windows Installer の形式 (.msi.mst) ではなく、 WiX 自身の形式である .wixpdb.wixmst を使うように指示を与えます。

torch.exe -p -xi Error\Product.wixpdb Fixed\Product.wixpdb
          -out Patch.wixmst

さらに、いつもの WiX のコンパイラとリンカを使ってパッチ・パッケージをビルドしなければなりませんが、 今回は、出力形式が通常のものとは違う .wixmsp になります。 リンカに対してこのファイル形式で出力するように指示する必要はありません。 リンカ自身がソース・ファイルの内容に従って出力形式を自動的に決定します。

candle.exe Patch.wxs
light.exe Patch.wixobj

そして、最後に、前のステップの出力結果と、少し前に作ったトランスフォームから、 実際の Windows Installer のパッチ・パッケージをビルドします。 パッチ作成を担当する WiX ツールである pyro に対しては、トランスフォーム・ファイルの名前だけでなく、 対応する PatchBaseline/@Id 属性も、コマンド・ラインで指定してやる必要があります。

pyro.exe Patch.wixmsp -out Patch.msp -t Sample Patch.wixmst

Patch.msp が実際に配布されるパッチ・インストーラになります。 これをテストするためには、最初にオリジナルのパッケージ(Error/Product.msi)をインストールし、次にパッチを当てます。

msiexec /p Patch.msp

… そしてファイルが本当に新しいバージョンに変っていることを確認して下さい。 次に、プログラムの追加と削除 を開いて、更新プログラムの表示 にチェックを入れ、 最初にパッチを削除し (変更されたファイルは元のファイルに戻ります)、次にプログラムそのものを削除してください。

訳注:以下、現在は削除されている記述を参考のために記します。

管理者であれば、//server/Patch.msi に置かれている管理ソース・イメージを、パッチによって新しいソース・イメージに更新することが出来ます。 この新しいソース・イメージは、更新されたフルセットの配布メディアから管理インストールによって作成された場合と同一のソース・イメージになります。

msiexec /a //server/Patch.msi /p Patch.msp

プログラムを使用するワークグループのメンバーは、更新を受け取るために、 新しい管理ソース・イメージからアプリケーションを再インストールしなければなりません。 アプリケーションを完全に再インストールして、更新された .msi ファイルをユーザーのコンピュータにキャッシュとして保存するために、 ユーザーは以下のコマンドを実行します。

msiexec /fvomus //server/Patch.msi

↑ 先頭  |  • 目次  |  « 前へ  |  次へ »  |  ∗ 原文

Table of Contents

1 始めよう

  1. ソフトウェア・パッケージ
  2. 中に入るファイル
  3. 使用に供する
  4. 便利な追加機能
  5. どこにインストールするか
  6. 条件付きインストール
  7. ファイルだけでなく
  8. 削除時の孤児化

2 ユーザー・インタフェイス

  1. 最初のステップ
  2. カスタムの設定
  3. UI の魔法
  4. 英語はわかりますか
  5. チェーンの新しい環
  6. 地域化を考える

3 イベントとアクション

  1. 列に並んで
  2. 追加のアクション
  3. 本に書かれていないこと
  4. コントロールをコントロールせよ
  5. マネージする方法
  6. 後の段階で

4 アップグレードとモジュラー化

  1. 古いのを探す
  2. 自分自身を置き換える
  3. パッチワーク
  4. 断片
  5. 融合するもの

5 Net と .NET

  1. .NET の枠組み
  2. ブートストラップ
  3. インターネットを起動する
  4. ウェブ・ディレクトリ
  5. サービスの提供

6 COM、式の構文、その他

  1. 違う色のコンポーネント
  2. 式の構文
  3. 書式指定文字列
  4. DDE 接続
  5. ディレクトリの作成
  6. 複数メディアのインストーラ
  7. プログラムの追加と削除の項目
  8. 新顔のユーザー
  9. 環境に優しく
  10. XML
  11. COM+ アプリケーション
  12. バージョンごとに

7 SQL

  1. データベースを作成する

8 ユーザー・インタフェイス再び

  1. 一つだけのダイアログ
  2. チューニング・アップ
  3. 相互作用
  4. カスタマイズがいっぱい
  5. これが進捗ですか
  6. よく出来ました
  7. 法律用語
  8. 順番外
  9. 英語はわかりませんか

9 トランスフォーム

  1. インストーラを変形する

10 標準ライブラリ

  1. カスタム・アクションとユーザー・インタフェイス
  2. お静かに願います