Lesson 9 トランスフォーム

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

トランスフォームを使う理由として、一つ面白いものがあります。 それは、ユーザー・インタフェイスの文字列を別の言語に変更する、というものです。 既に論じたように、WiX は WixUI のインタフェイス言語を地域化 (ローカライズ) することを許しています。 その機能を使えば、さまざまな言語でインストーラを作成することが出来ます。 しかし、複数の言語を必要とする場合は、この簡単な解法では、複数の平行するインストーラが作成できるだけです。 それぞれのインストーラがそれぞれ固有の言語を表示するのは結構なことですが、 配置すべき全てのファイルを別々のパッケージに重複して保存しなければなりません。

こういう場合にトランスフォームが役立ちます。 まず、基本となるインストーラ (これは英語でも何でも構いません) から始めます。 追加するすべての言語は実際には実行時のパッチになります。 Windows Installer が最初のページを表示する前にそのパッチを呼び出して、UI の文字列を指定された言語に翻訳するのです。 こうして、全ての言語は同一のインストーラ・パッケージを共有します。 インストールされるべきファイルはパッケージの中に一度しか出現せず、 それぞれの追加される言語はパッケージのサイズを少し増加させるだけになります。

インストールは小さなブートストラッパーで起動します。 ブートストラッパーは表示可能な言語をリストアップして、おそらくは実行中のオペレーティング・システムの言語を既定値として選ぶでしょうが、 ユーザーが好きな言語を選ぶことも出来ます。 言語の選択が終ると、ブートストラッパーは適用すべきトランスフォームを指定して実際のインストーラを起動します。

そのような複数言語インストーラを作成するために必要となる変更は驚くほど小さいものです。

訳註:このレッスンについては、日本語版のサンプルは提供していません。 ここで説明されている事柄に関しては、WiX のソース自体には、注目すべきところはほとんど有りません。

<?xml version='1.0' encoding='windows-1252'?>
<Wix xmlns='http://schemas.microsoft.com/wix/2006/wi'>

  <Product Name='Hoge 1.0'
      Id='YOURGUID-86C7-4D14-AEC0-86416A69ABDE'
      UpgradeCode='YOURGUID-7349-453F-94F6-BCB5110BA4FD'
      Language='1033' Codepage='$(var.codepage)'
      Version='1.0.0' Manufacturer='Piyo Software'>

    <Package Id='*' Keywords='Installer'
        Description="Piyo Software's Hoge 1.0 Installer"
        Comments='Hoge is a registered trademark of Piyo Software.'
        Manufacturer='Piyo Software' InstallerVersion='100'
        Languages='1033' Compressed='yes' 
        SummaryCodepage='$(var.codepage)' />

  ...

</Wix>

最初のステップとして、地域化されたインストーラを別々にビルドします。 以前とほとんど同じですが、それぞれのインストーラにサポートされている言語のテーブルで示されている正しいコードページを指定しなければなりません。

candle.exe SampleMulti.wxs -dcodepage=1252
light.exe -ext WixUIExtension -cultures:en-us -out SampleMulti.msi 
    SampleMulti.wixobj

candle.exe SampleMulti.wxs -dcodepage=1250
light.exe -ext WixUIExtension -cultures:hu-hu -out Sample_Hu-hu.msi 
    SampleMulti.wixobj

candle.exe SampleMulti.wxs -dcodepage=1252
light.exe -ext WixUIExtension -cultures:fr-fr -out Sample_Fr-fr.msi
    SampleMulti.wixobj

次に、WiX のトランスフォーム・ツール Torch を使って、順番に、地域化されたインストーラとベースになるインストーラ (SampleMulti.msi) を比較して、両者間の差異を含んだ .mst トランスフォーム・ファイルを作成します。

torch.exe -p -t language SampleMulti.msi Sample_Hu-hu.msi
    -out hu-hu.mst
torch.exe -p -t language SampleMulti.msi Sample_Fr-fr.msi
    -out fr-fr.mst

これで、ブートストラップ・インストーラが、適切な言語パッケージを指定してベースのインストーラ・パッケージを呼び出すことが出来るようになります。

msiexec /i SampleMulti.msi TRANSFORMS="fr-fr.mst"

この場合、ブートストラッパーが必要になる他に、独立したトランスフォーム・ファイルも配布する必要が生じます。 より良い方法は、トランスフォームを元のパッケージに埋め込むことです (今のところ WiX ではサポートされていませんが、EmbedTransform というツールをダウンロードして使うことが出来ます)。

EmbedTransform.exe SampleMulti.msi hu-hu.mst
EmbedTransform.exe SampleMulti.msi fr-fr.mst

使い方で違うところは一点だけ、トランスフォーム・ファイルの名前の前にコロンを付けて、 Windows Installer にパッケージ内部を探すように指示することだけです。

msiexec /i SampleMulti.msi TRANSFORMS=":fr-fr.mst"

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

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. お静かに願います