WPFアプリ(.NET Frameworkアプリ)のインストーラーで、.NET Frameworkがインストールされていることを前提条件とする方法おいて、WiXと.NET Framework Extensionを使った設定編です。
WiXを使って前提条件を実現する
前提条件を実現するためには、各種テーブルに情報を設定する必要があります。今回の目的である.NET Frameworkのインストール条件を設定するためには以下のテーブルを設定する必要があります。
- RegLocatorテーブル
- AppSearchテーブル
- LaunchConditionテーブル
- Propertyテーブル
- InstallUISequence / InstallExecuteSequenceテーブル
各テーブルに設定すべき内容は前々回の投稿で説明しました。直接テーブルを設定するのはかなり面倒です。
今回は、テーブルに情報を直接設定するのではなく、WiX toolsetおよびそのアドオンWiX toolset Visual Studio 201x Extensionを使った場合の設定方法です。
WiX toolsetを使う場合は、実現方法に二つあります。
- 必要な各テーブルの情報をXMLで記述して実現する
- .NET Framework Extensionを使って最小限の記述で実現する
前回の投稿で前者の方法を説明しました。今回は、後者の方法で実現する方法を説明します。
.NET Framework Extensionとは、.NET Frameworkを必要とするアプリのインストーラーで、
- システムにインストールされている.NET Frameworkのバージョンを確認する
- アプリが必要とするバージョンの.NET Frameworkのインストールする
などの実装を容易に実現するためのライブラリです。今回は、前者のバージョンを確認するための機能を利用します。
WiXプロジェクトは作成済みとしたとき、以下の手順で前提条件を追加します。
- .NET Framework Extensionへの参照を追加
- 名前空間の定義の追加
- 事前定義プロパテの参照を追加
- 前提条件を追加
なお、具体的な方法は、How To: Check for .NET Framework Versions(英語)に詳細があります。
1 .NET Framework Extensionへの参照を追加
.NET Framework Extension を使うためには、その実装モジュールであるWixNetFxExtension.dll をWiXプロジェクトに参照として追加する必要があります。なお、WixNetFxExtension.dll は、WiX toolset のインストーラーでインストールされます。
Extentionへの参照を追加するには、WiXのプロジェクトのReferencesのコンテキストメニューを開き、「参照の追加」を選択します。
すると、モジュール選択ダイアログが表示されます。
WiX toolset のインストーラーでインストールされるWixNetFxExtension.dll は、WiX toolset 3.11かつ64ビットWindowsであれば、
C:\Program Files (x86)\WiX Toolset v3.11\bin\
のフォルダーにインストールされています。ダイアログで上記のフォルダーを開き、WixNetFxExtension.dllファイルを選択して、[追加]ボタンで追加し、[OK]ボタンで確定します。
これで、.NET Framework Extensionの参照の追加は完了です。
2 名前空間の定義の追加
参照した.NET Framework ExtensionをXML内で使用するためには、まず、名前空間の定義を追加する必要があります。
XMLファイルのルートタグであるWix
タグにnetfx
の名前空間の定義を追加します。
xmlns:netfx="http://schemas.microsoft.com/wix/NetFxExtension"
この名前空間の定義を、下記の図の選択した部分のように追加します。
これで名前空間を定義したnetfx:
がXMLファイル内で使用できるようになります。
3 事前定義プロパテの参照を追加
.NET Framework Extensionでは、.NET Frameworkのインストール状態を表す定義済みのプロパティが多くあります。
すべてのプロパティのリストは、ここ(英語)に説明されています。
今回の機能に関連する一部のプロパティを抜粋します。これらのプロパティは、WiX v3.10以降で利用できます。
プロパティ名 | 意味 |
WIX_IS_NETFRAMEWORK_40_OR_LATER_INSTALLED | .NET Framework 4.0以降がインストールされてるとき1が設定されます。 |
WIX_IS_NETFRAMEWORK_45_OR_LATER_INSTALLED | .NET Framework 4.5以降がインストールされてるとき1が設定されます。 |
WIX_IS_NETFRAMEWORK_451_OR_LATER_INSTALLED | .NET Framework 4.5.1以降がインストールされてるとき1が設定されます。 |
WIX_IS_NETFRAMEWORK_452_OR_LATER_INSTALLED | .NET Framework 4.5.2以降がインストールされてるとき1が設定されます。 |
WIX_IS_NETFRAMEWORK_46_OR_LATER_INSTALLED | .NET Framework 4.6以降がインストールされてるとき1が設定されます。 |
WIX_IS_NETFRAMEWORK_461_OR_LATER_INSTALLED | .NET Framework 4.6.1以降がインストールされてるとき1が設定されます。WiX v3.11から利用できます。 |
WIX_IS_NETFRAMEWORK_462_OR_LATER_INSTALLED | .NET Framework 4.6.2以降がインストールされてるとき1が設定されます。WiX v3.11から利用できます。 |
これらのプロパティは、対象のバージョン以降がインストールされていると1が設定されます。
これらのプロパティは、.NET Framework Extensionを参照するだけではまだ使えません。使いたいプロパティを宣言する必要があります。そのためには、WiX toolsetでは、PropertyRef
タグを使います。PropertyRef
タグの説明はここ(英語)にあります。それによると、Fragmentタグや Productタグの子供要素として
<PropertyRef Id="propertyId"/>
の定義をすれば使用したいプロパティを宣言できます。各設定値の意味は以下の通りです。
- propertyId: 使用したいプロパティのIDを設定します。
今回は、.NET Framework 4.5以降がインストールされていることを表すプロパティを使用したいため、属性は以下のように設定します。
- propertyId: WIX_IS_NETFRAMEWORK_45_OR_LATER_INSTALLED
実際のコードは以下のようになります。
<PropertyRef Id="WIX_IS_NETFRAMEWORK_45_OR_LATER_INSTALLED"/>
この定義をProductタグの子供要素として追加します。
4 前提条件を追加
最後に、前提条件を追加します。前回の投稿で説明した方法と同じです。
プロパティを参照して前提条件を設定するには、WiX toolsetでは、Condition
タグを使います。Condition
タグの説明はここ(英語)にあります。それによると、Fragmentタグや Productタグの子供要素として
<Condition Message="messageValue"> <![CDATA[condition]]> </Property>
の定義をすれば前提条件を設定できます。なお、このサンプルには、今回の目的の実現に不要な属性については記載を省略しています。各設定値の意味は以下の通りです。
- messageValue: 条件を満たさなかった場合に表示するメッセージを設定します。
- condition: 評価結果がTrueでなければならない条件式を設定します。条件式にはプロパティなどを参照できます。条件式の評価結果がFalseだった場合、メッセージを表示して、インストールを中断します。
前回とは異なり、値の比較をする必要はありません。条件式に比較演算子なしにプロパティ名のみが出現した場合、プロパティが定義されていればTrue、定義されていなければFalseと評価されます。
WIX_IS_NETFRAMEWORK_45_OR_LATER_INSTALLEDプロパティは定義されていれば指定のバージョン以降がインストールされており、アプリのインストールを続けてよいことになります。そのめ、単純にプロパティ名を記述すればよいことになります。
- messageValue: このアプリをインストールす前に、システムに.NET Framework 4.5またはそれ以降をインストールしてください。
- condition: Installed OR WIX_IS_NETFRAMEWORK_45_OR_LATER_INSTALLED
実際のコードは以下のようになります。
<Condition Message="このアプリをインストールす前に、システムに.NET Framework 4.5またはそれ以降をインストールしてください。"> <![CDATA[Installed OR WIX_IS_NETFRAMEWORK_45_OR_LATER_INSTALLED]]> </Condition>
この定義をProduct
タグの子供要素として追加します。
以上により、定義は完了です。
後はWiXプロジェクトをビルドすれば完成です。
“デスクトップアプリのインストーラーで.NET Frameworkの条件を設定する4” への1件の返信