WPFアプリ(.NET Frameworkアプリ)を作成するときは、使用する.NET Frameworkのバージョンを指定します。そのアプリのインストーラーでアプリをインストールしたときは、アプリは必ず起動できるようにしたいです。そのためには、必要とするバージョンの.NET Frameworkがインストールされていることをインストール時に保証する必要があります。
アプリの実行に必要となる.NET Framework
WPFアプリ(.NET Frameworkアプリ)を実行するためには、作成時に指定したバージョンの.NET Frameworkが必要となります。
そのアプリのインストーラーでアプリをインストールしたとき、アプリが起動できないことを防ぐためには、必要とするバージョンの.NET Frameworkがシステムにインストールされている必要があります。
この条件を満たすために、必要とするバージョンの.NET Frameworkのインストーラーをアプリのインストーラーに内包してしまう方法もあります。この場合、インストーラーのサイズが巨大化します。
新しいWindowsには新しめの.NET Frameworkがインストールされていることがほとんどです。そのため、アプリの実行のために.NET Frameworkをインストールすることが必要になるのは、古いWindowsのときのみになります。
必要とするバージョンの.NET frameworkはインストール済みであることがほとんどのため、インストーラーのサイズが大きくなる原因となる.NET frameworkのインストーラーをアプリのインストーラーに内包するということはやりたくありません。
しかし、アプリのインストール後にはアプリが起動することを保証したいです。その対策のためにインストール時に必要とするバージョンの.NET frameworkがインストールされていることを確認し、存在するときのみアプリをインストールできるようにします。
Windows Installer技術の前提条件を使う
今回はWindows Installer技術を使ったインストーラーを前提として実現します。Windows Installer技術の場合、前提条件という仕組みがあります。前提条件は、インストールをするときにインストールするための前提条件を満たさないときには、エラーとしてインストールを中断する機能です。
Windows Installer技術では、各種インストール情報をテーブルという概念に基づいて保持します。前提条件はLaunchConditionテーブルに条件を定義します。
今回は、.NET Framewrok version 4.5以降がインストールされてていることを条件とします。しかし、LaunchConditionテーブルに指定できる条件は、プロパティなどとの比較のみです。
そのため、.NET frameworkがインストールされているかどうかの状態をプロパティに設定する必要があります。
.NET Frameworkのインストール状態は、ここ(方法: インストールされている .NET Framework バージョンを確認する)によると、レジストリの値で判断できます。
.NET framework 4.5以降の場合は、レジストリの
HKEY_LOCAL_MACHINE\Software\Microsoft\NET Framework Setup\NDP\v4\Full
にある、Releaseキーの値で判断します。Releaseキーの値は、.NET Frameworkのバージョンにより以下の値となっています。
.NET Framework Version |
DWORD の値 | システム |
---|---|---|
4.5 | 378389 | すべてのシステム |
4.5.1 | 378675 | Windows 8.1 または Windows Server 2012 R2 |
4.5.1 | 378758 | Windows 8、Windows 7 SP1、または Windows Vista SP2 |
4.5.2 (4.5.51209) |
379893 | すべてのシステム |
4.6 | 393295 | Windows 10 1507 (ビルド10240)のシステム |
4.6 | 393297 | Windows 10 1507 (ビルド10240)以外のシステム |
4.6.1 | 394254 | Windows 10 1511 (ビルド10586, November Update)のシステム |
4.6.1 | 394271 | Windows 10 1511 (ビルド10586, November Update)以外のシステム |
4.6.2 | 394802 | Windows 10 1607 (ビルド14393, Anniversary Update) のみ |
4.6.2 | 394806 | Windows 10 1607 (ビルド14393, Anniversary Update)以外のシステム |
4.7 | 460798 | Windows 10 1703 (ビルド15063, Creators Update) のみ |
4.7 (4.7.02053) |
460805 | Windows 10 1703 (ビルド15063, Creators Update) 以外のシステム |
4.7.1 | 461308 | Windows 10 1709 (ビルド16299, Fall Creators Update) のみ |
4.7.1 | 461310 | Windows 10 1709 (ビルド16299, Fall Creators Update) 以外のシステム |
4.7.2 | 461808 | Windows 10 1803 (ビルド17134, April 2018 Update) のみ |
4.7.2 | 461814 | Windows 10 1803 (ビルド17134, April 2018 Update) 以外のシステム |
4.8.0 (4.8.03752) | 528040 | Windows 10 1903 (ビルド18362, May 2019 Update) のみ |
4.8.0 (4.8.03761) | 528049 | Windows 10 1903 (ビルド18362, May 2019 Update) 以外のシステム |
この表からわかるように値はバージョンが上がるにつれて単調増加しています。
.NET Framework 4.xは、システム上には一つしかインストールできません。4.xの新しいバージョンをインストールした場合はそのバージョンが過去の4.xのバージョンの実行環境も提供します。
そのため、たとえば.NET Framework 4.5以降がインストールされていることを保証したい場合は、Releaseキーの値が378389以上の値であることを確認すればよいことになります。
この条件をLaunchConditionテーブルに設定することになります。
実際の設定方法は、次の投稿でしたいと思います。
2019年9月追記
.NET Framework 4.8.0に関する情報を追加しました。
“デスクトップアプリのインストーラーで.NET Frameworkの条件を設定する1” への1件の返信