How To: .NET Framework のバージョンを チェックする

マネージドコードを使って書かれたアプリケーションをインストールしている時、 インストールに先立って ユーザーのマシンに必要なバージョンの .NET Framework が あるかを 確認する事は、多くの場合 役に立ちます。この how to は、インストール時に .NET Framework のバージョンを確認する WiX サポートの使用を述べています。 インストール中に どのように .NET Framework をインストールするか における インフォメーションに関しては、 How To: ブートストラップ プログラムを使って .NET Framework を インストールする を 見て下さい。

Step 1: プロジェクトに WiX .NET extensions ライブラリーを 追加する

WiX の .NET についてのサポートは、WiX extension ライブラリーでインクルードされていて、 プロジェクトで 使う前に追加されていなければなりません。もし WiX を コマンドラインで 使っているなら、candle と light のコマンドラインに 以下を追加する必要があります:

-ext WiXNetFxExtension

もし WiX を Visual Studio で使っているなら、Add Reference dialog を使って extensions を 追加する事ができます:

  1. Visual Studio で WiX プロジェクトを開く
  2. ソリューション エクスプローラーでプロジェクトを右クリックして、Add Reference... を選ぶ
  3. リストから WixNetFxExtension.dll アセンブリを選んで、追加をクリックする
  4. Add Reference dialog を閉じる

Step 2: プロジェクトに WiX .NET extensions 名前空間を 追加する

いったん ライブラリーがプロジェクトに追加されたら、目当ての WiX エレメントにアクセスできるように プロジェクトに .NET extensions 名前空間を 追加する必要があります。これをするには、プロジェクトで トップレベルの <Wix> エレメントに 以下のアトリビュートを追加する 修正をします:

xmlns:netfx="http://schemas.microsoft.com/wix/NetFxExtension"

スタンダードな名前空間と 追加された .NET extensions 名前空間を持つ 完全な WiX エレメントは このようになります:

<Wix xmlns="http://schemas.microsoft.com/wix/2006/wi"
     xmlns:netfx="http://schemas.microsoft.com/wix/NetFxExtension">

Step 3: 必要なプロパティを プロジェクトで参照する

WiX の .NET Framework extension は、サービスパック レベルを含む 現行バージョンの .NET Framework すべてについてのプロパティ を定義しています。 これらのプロパティを あなたのインストーラーで利用可能にするには、 <PropertyRef> エレメントを使って これらを参照する必要があります。 使いたい各プロパティに対して、一致する PropertyRef をプロジェクトに追加して下さい。 例えば、もし .NET Framework 2.0 を検出しているなら、以下を追加します:

<PropertyRef Id="NETFRAMEWORK20"/>

Step 4: Condition で 予め定義されたプロパティを 使う

いったん プロパティが参照されたら、WiX のどんな条件文ででも それを使う事ができます。 例えば、以下の Condition は、もし .NET Framework 2.0 がインストールされていなかったら インストールをブロックします。

<Condition Message="This application requires .NET Framework 2.0. Please install the .NET Framework then run this installer again.">
    <![CDATA[Installed OR NETFRAMEWORK20]]>
</Condition>

Installed は、チェックが アプリケーションの修復や削除ではなくて インストールの時にだけ 行われる事を保証する Windows Installer プロパティです。condition の NETFRAMEWORK20 の部分は、 もし .NET Framework 2.0 がインストールされていれば パスします。もし セットされていなければ、 インストーラーはエラー メッセージを表示して、インストール プロセスを中止します。

Framework のサービスパック レベルを照合するには、*_SP_LEVEL プロパティを使って下さい。 以下の Condition は、もし マシンに .NET Framework 3.0 SP1 が存在しなかったら インストールをブロックします。

<Condition Message="This application requires .NET Framework 3.0 SP1. Please install the .NET Framework then run this installer again.">
    <![CDATA[Installed OR (NETFRAMEWORK30_SP_LEVEL and NOT NETFRAMEWORK30_SP_LEVEL = "#0")]]>
</Condition>

前の例での様に Installed は、ユーザーが修復や削除を行っている時に 実行を妨げるチェックです。NETFRAMEWORK30_SP_LEVEL プロパティは、もし Service Pack 1 が存在すれば "#1" にセットされています。 前に # の付いた値に対して 数字での比較を行う方法がないので、Condition は まず NETFRAMEWORK30_SP_LEVEL がセットされているか を見るチェックをして、それが数字に セットされていると 立証します。これは、どんな .NET 3.0 用サービスパックが インストールされているかどうか を正確に示します。

 

( 訳注: 条件文でのプロパティの使用 ( Using Properties in Conditional Statements ) にある様に、Condition には9種類あります。これを WiX が書かれた場所に応じて 適切に振り分けます。 その中で、 LaunchCondition Table という所に行く Condition だけが 逆の記述に見えます。 LaunchCondition tableColumns@Condition に書いてある様に 「インストールが始まるためには True に評価されなければならない式」となっている所為です ( Expression that must evaluate to True for installation to begin. )。 注意して下さい。)

( 訳注: Windows Installer によってあらかじめ定義されている Property は プロパティ リファレンス ( Property Reference ) から探して下さい。演算子は、 条件文シンタックス ( Conditional Statement Syntax ) で確認して下さい。 )