18

.NET 4.0または4.5のいずれかを使用できるアプリケーションをインストールする場合、前提条件の.NET Frameworkをインストールする際のベストプラクティスは何ですか?そして、WiXでBurnを使用してどのように実装しますか?

これらは、私が知っているオプションとトレードオフです。

オプション1:.NET 4.0をインストールします(必要なものだけ)

  • 利点:不明(これが唯一の選択肢であるWindows XPを除く)

オプション2:.NET 4.5が存在しない場合は、.NET4.5をインストールします

  • 利点:ユーザーは、将来のアプリのために後で.NET4.5をインストールする必要がありません。ユーザーが後で.NET4.5にアップグレードするときに、アプリで.NETバージョンの変更が発生することはありません。アプリはすぐに.NET4.5のパフォーマンスが向上します。

オプション3:.NET4.xがどちらも存在しない場合にのみ.NET4.5をインストールします

  • 利点:.NET 4.0がすでにインストールされている場合、オプション2よりもはるかに高速な展開。そうでない場合は、オプション2の利点が適用されます。

私の知る限り、パフォーマンスの向上が重要な場合はオプション2、平均展開速度が重要な場合はオプション3がベストプラクティスになります。これは正しいですか?オプション1の利点がありませんか?最も重要なことは、オプション3が理にかなっている場合、Webから.NETをインストールするときに、Burnを使用してどのように実装するのでしょうか。

4

1 に答える 1

24

以下は、バンドル内の.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=&quot;4.5.50709&quot;) AND (NOT VersionNT64 OR (Netfx4x64FullVersion=&quot;4.5.50709&quot;))"
              InstallCondition="(VersionNT >= v6.0 OR VersionNT64 >= v6.0) AND (NOT (Netfx4FullVersion=&quot;4.5.50709&quot; OR Netfx4x64FullVersion=&quot;4.5.50709&quot;))"/>
</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 &lt; v6.0 OR VersionNT64 &lt; 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を使用していたため、インストーラーは途中で再起動します。繰り返しますが、これは、独自のカスタム管理ブートストラッパーを使用している場合にのみ問題になります。

于 2012-11-12T11:41:49.303 に答える