以下は、バンドル内の.NETを検出する方法です。DetectConditionsとInstallConditionsの使用に注意してください。DetectConditionは、特定のパッケージがインストールされているかどうかを確認しますが、InstallConditionを使用すると、DetectConditionをオーバーライドして、パッケージをいつインストールするかを指定できます。たとえば、XPでは.NET 4.5をインストールできないため、InstallConditionはそのような場合のインストールを防ぎます。
<util:RegistrySearch Root="HKLM" Key="SOFTWARE\Microsoft\Net Framework Setup\NDP\v4\Full" Value="Version" Variable="Netfx4FullVersion" />
<util:RegistrySearch Root="HKLM" Key="SOFTWARE\Microsoft\Net Framework Setup\NDP\v4\Full" Value="Version" Variable="Netfx4x64FullVersion" Win64="yes" />
<!-- .NET 4.5 only installed if Vista or higher AND it's not already installed-->
<PackageGroup Id="Netfx45">
<ExePackage Id="Netfx45" Cache="no" Compressed="yes" PerMachine="yes" Permanent="yes" Vital="yes" InstallCommand="/q"
SourceFile="C:\Program Files\Microsoft SDKs\Windows\v7.0A\Bootstrapper\Packages\DotNetFX45Full\dotnetfx45_full_x86_x64.exe"
DetectCondition="(Netfx4FullVersion="4.5.50709") AND (NOT VersionNT64 OR (Netfx4x64FullVersion="4.5.50709"))"
InstallCondition="(VersionNT >= v6.0 OR VersionNT64 >= v6.0) AND (NOT (Netfx4FullVersion="4.5.50709" OR Netfx4x64FullVersion="4.5.50709"))"/>
</PackageGroup>
<!-- .NET 4.0 only installed if XP AND it's not already installed -->
<PackageGroup Id="Netfx4Full">
<ExePackage Id="Netfx4Full" Cache="no" Compressed="yes" PerMachine="yes" Permanent="yes" Vital="yes" InstallCommand="/q"
SourceFile="C:\Program Files\Microsoft SDKs\Windows\v7.0A\Bootstrapper\Packages\DotNetFX40\dotNetFx40_Full_x86_x64.exe"
DetectCondition="Netfx4FullVersion AND (NOT VersionNT64 OR Netfx4x64FullVersion)"
InstallCondition="(VersionNT < v6.0 OR VersionNT64 < v6.0) AND (NOT (Netfx4FullVersion OR Netfx4x64FullVersion))"/>
</PackageGroup>
次に、パッケージの1つをインストールする場合は、チェーンでそれを参照するだけです。
<Chain>
<PackageGroupRef Id='Netfx45'/>
</Chain>
あなたの特定の質問に関しては、アプリケーションがテストされたフレームワークのバージョンをインストールします。.NET4.0と.NET4.5の両方に対してテストした場合、それは判断の呼びかけだと思いますが、セットアップエクスペリエンスを可能な限り単純化するように努めます。したがって、.NET 4.0がすでにインストールされていて、アプリケーションが.NET 4.5を必要としない場合は、インストールしません。
また、カスタムのマネージドブートストラッパーアプリケーションを使用している場合、オプション2には欠点があります。.NET 4.0がインストールされていて、マネージドブートストラッパーに.NET 4.0(またはそれ以降)が必要だとします。インストーラーを実行すると、.NET4.0の代わりに.NET4.5がインストールされ、更新時に.NET Frameworkを使用していたため、インストーラーは途中で再起動します。繰り返しますが、これは、独自のカスタム管理ブートストラッパーを使用している場合にのみ問題になります。