Lesson 5 Net と .NET

2. ブートストラップ

.NET フレームワークのような外部パッケージを検出する方法は既に見たとおりですが、 ユーザーは、彼らのマシンに前提条件や依存するパッケージがまだ存在していない場合に、 単に警告を受けるだけでは満足しません。 ユーザーのマシンの状況について警告するだけでなく、 必要とされる依存パッケージを自分自身でインストールするようなインストーラを作成することは、 少しも簡単なことではありませんでした。 しかし、今では、WiX に内蔵されている Burn のおかげて、それがとても楽な仕事になりました。

バンドルと呼ばれる Burn のプロジェクトを作成することはとても簡単です。 バンドルは独立した WiX プロジェクトであることに注意してください。 MSI は以前と全く同じようにして作成します。 バンドルは、既に完成している MSI をその他の同時にインストールしたいパッケージと組み合わせて、 独立したブートストラッパ・インストーラを作成します。 このブートストラッパ・インストーラには、ユーザーが開始できる実行ファイルが含まれますが、 それに加えて、さまざまなパッケージに必要とされる独立した MSI や EXE が (外部参照として、または、 メインの実行ファイルにバンドルされて) 含まれます。

<Wix xmlns="http://schemas.microsoft.com/wix/2006/wi">
  <Bundle Name="..." Version="..." Manufacturer="..." UpgradeCode="..." 
      Copyright="..." IconSourceFile="..." AboutUrl="...">
    <BootstrapperApplicationRef
        Id="WixStandardBootstrapperApplication.RtfLicense" />
    
    <Chain>
      <ExePackage Id="Dependency1"
          SourceFile="Dependency_package_1.exe" />
      <ExePackage Id="Dependency2"
          SourceFile="Dependency_package_2.exe" />
    
      <RollbackBoundary />
    
      <MsiPackage Id="MainPackage"
          SourceFile="Main_package.msi" Vital="yes" />
    </Chain>
  </Bundle>
</Wix>

このプロジェクトをビルドすることは、今までに見てきた他のプロジェクトのすべてと同じように、とても簡単です。 違いと言えば、.msi ではなく .exe (正確に言えば SampleBurn.exe) を作成することだけです。

candle.exe SampleBurn.wxs
light.exe -ext WixBalExtension SampleBurn.wixobj

通常のプロジェクトとは違って、このプロジェクトはルートに Product ではなく Bundle を持ちます。 この Bundle が、名前、バージョン、著作権、その他よくある UI の詳細を記述するのに、ほとんど同じような属性を使用します。 Bundle は、主たる部分として、インストールされるべき全てのパッケージを順を追ってリストする Chain という子を持ちます。 RollbackBoundary タグを使って、ユーザーがインストールをロールバックすると決めたときに、 何をロールバックし、何をロールバックすべきでないかを示す境界線を引くことが出来ます。

Chanin は、通常、二種類の子を持ちます。すなわち、ExePackageMsiPackage の要素です。 これらは、ともに、SourceFileDownloadUrl か、どちらかの属性を持つことが出来ます。 第一の場合は、セットアップ・パッケージそのものが私たちのインストーラと一緒にバンドルされて、直接に配布されることになります (とは言っても、もちろん、提供されるインストーラをウェブ・インストーラ、すなわち、 配備すべき大量の素材をインターネットからダウンロードする小さな実行ファイルとすることは、いつでも可能です)。 第二の場合は、指定された URL からインストーラが取得され、そして、実行されます。

上記の単純な例では、依存パッケージは両方とも無条件にインストールされます。 現実のシナリオにおいては、通常は、最初にこれらのパッケージが既にインストールされているかどうかをチェックして、 ターゲットマシンにそれが見つかった場合はインストールをスキップしなければなりません。 そのためには、既におなじみになっている条件を使用します。

<Wix xmlns="http://schemas.microsoft.com/wix/2006/wi"
     xmlns:bal="http://schemas.microsoft.com/wix/BalExtension"
     xmlns:util="http://schemas.microsoft.com/wix/UtilExtension">
  <Bundle Name="..." Version="..." Manufacturer="..." UpgradeCode="..."
      Copyright="..." IconSourceFile="..." AboutUrl="...">
    <BootstrapperApplicationRef
        Id="WixStandardBootstrapperApplication.RtfLicense" />
    
    <util:RegistrySearch Root="HKLM"
        Key="SOFTWARE\Microsoft\Net Framework Setup\NDP\v4\Full"
        Value="Version" Variable="Net4FullVersion" />
    <util:RegistrySearch Root="HKLM"
        Key="SOFTWARE\Microsoft\Net Framework Setup\NDP\v4\Full"
        Value="Version" Variable="Net4x64FullVersion" Win64="yes" />
    
    <Chain>
      <ExePackage Id="Net45"
          Name="Microsoft .NET Framework 4.5.1 Setup"
          Cache="no" Compressed="yes" PerMachine="yes"
          Permanent="yes" Vital="yes" InstallCommand="/q"
          SourceFile="NDP451-KB2859818-Web.exe"
          DetectCondition="(Net4FullVersion = &quot;4.5.50938&quot;) AND (NOT VersionNT64 OR (Net4x64FullVersion = &quot;4.5.50938&quot;))"
          InstallCondition="(VersionNT >= v6.0 OR VersionNT64 >= v6.0) AND (NOT (Net4FullVersion = &quot;4.5.50938&quot; OR Net4x64FullVersion = &quot;4.5.50938&quot;))"
      />
    
      <ExePackage Id="Net4Full"
          Name="Microsoft .NET Framework 4.0 Setup"
          Cache="no" Compressed="yes" PerMachine="yes"
          Permanent="yes" Vital="yes" InstallCommand="/q"
          SourceFile="dotNetFx40_Full_setup.exe"
          DetectCondition="Net4FullVersion AND (NOT VersionNT64 OR Net4x64FullVersion)"
          InstallCondition="(VersionNT &lt; v6.0 OR VersionNT64 &lt; v6.0) AND (NOT (Net4FullVersion OR Net4x64FullVersion))"
      />
    
      <RollbackBoundary />
    
      <MsiPackage Id="MainPackage" SourceFile="Main_package.msi"
          DisplayInternalUI="yes" Compressed="yes" Vital="yes" />
    </Chain>
  </Bundle>
</Wix>

これは既に単なる例以上のものです。これは .NET フレームワークの扱い方を知っているインストーラの実物のコピーです。 これをコンパイルする時も、いくつかの拡張ライブラリを参照する必要があります。

candle.exe -ext WixNetFxExtension -ext WixBalExtension 
    -ext WixUtilExtension SampleBurn.wxs
light.exe -ext WixNetFxExtension -ext WixBalExtension
    -ext WixUtilExtension SampleBurn.wixobj

これがどのように動くか、そして、何をするかを見てみましょう。

二つの RegistrySearch アイテムは、ユーティリティ拡張ライブラリによるもので、 インストールされているフレームワークの現在のバージョンを決定することを助けてくれます。 ExePackage は、ともに、提供されているインストーラを使ってフレームワークをインストールすべき場合を決定するための条件を持っています。 最初のものは、Vista 以降のシステムに対して、まだインストールされていなければ、4.5.1 をインストールします。 第二のものは、XP のシステムに対して、まだインストールされていなければ、4.0 をインストールします。 そして、最後に、Chain は私たち自身の .msi をインストールします。 ここでは、同時に、私たちの .msi が、オリジナルの完全 UI で走るべきことをも指定しています。 このように指定しない場合は、私たちのパッケージはサイレント・モードでインストールされることになります。

二つの .exe インストーラと私たちの .msi の全てが、結果として作成される単一の SampleBurn.exe 実行ファイルにまとめられることになります。

なお、セットアップ・プログラムの外観は、次のようにしてカスタマイズすることが出来ます。

<BootstrapperApplicationRef
    Id="WixStandardBootstrapperApplication.RtfLicense">
  <bal:WixStandardBootstrapperApplication LicenseFile="License.rtf"
      LogoFile="Logo.png" />
</BootstrapperApplicationRef>

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

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