12

インストール バンドルの前提条件としてMicrosoft .NET 4.5 を含める必要があり、できるだけ自動化したいと考えています。ただし、アンインストール時に .NET を削除しないでください。DetectConditionおよび/またはの使用方法についてはほぼすべて読んだと思いますがInstallCondition、まだ正しく理解できていません。.NET インストールを常に実行しているか、まったく実行していないかのいずれかです。

これが私の最新のセットアップです:

<Wix xmlns="http://schemas.microsoft.com/wix/2006/wi"
     xmlns:util="http://schemas.microsoft.com/wix/UtilExtension"
     xmlns:bal="http://schemas.microsoft.com/wix/BalExtension"
     xmlns:netfx='http://schemas.microsoft.com/wix/NetFxExtension'>

  <!-- Define minimum .NET Framework version -->
  <?define NetFx45MinRelease = 377811?>
  ...
    <Chain>
      <PackageGroupRef Id="Netfx45FullPackage"/>
      ...
    </Chain>

    <PackageGroup Id="Netfx45FullPackage">
      <ExePackage Id="Netfx45Full" Cache="no" Compressed="yes" PerMachine="yes" Permanent="yes" Vital="yes"
                  SourceFile="..\..\..\..\Environment\InstallerResources\Prerequisites\dotnetfx45_full_x86_x64.exe"
                  InstallCommand="/passive /norestart"
                  DetectCondition="NETFRAMEWORK45 &gt;= $(var.NetFx45MinRelease)"
                  InstallCondition="NOT REMOVE AND (NETFRAMEWORK45 &lt; $(var.NetFx45MinRelease))" />
    </PackageGroup>

(何らかの理由で、NetFx45MinReleaseWixNetFxExtension に含まれているはずなのに、自分自身を定義する必要がありました。)

設定を正しくするにはどうすればよいですか?

4

2 に答える 2

11

なぜあなたが問題を抱えているのかよくわかりませんが、私はちょうど同じ仕事をしていました. つまり、必要な場合にのみ.NET 4.5 をインストールし、ブートストラップ全体をアンインストールするときに .NET のアンインストールを行いません。

ただし、.NET 4.5は個別にアンインストールできるので、これは良いと思います。

これは私が使用したものです(おそらく他のスタックオーバーフローの投稿から派生したものです):

<PackageGroup Id="Netfx45Xxx">
    <ExePackage Id="Netfx45Xxx" Cache="no" Compressed="no" PerMachine="yes" Permanent="yes" Vital="yes" InstallCommand="/q"
        SourceFile="C:\wixtest\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>

奇妙なことに、既に Permanent="yes" が設定されています。これは、.NET をアンインストールし続けるための鍵です。

1 つの違いは、InstallCondition に明示的な "NOT REMOVE" がないことです。これは、Windows インストーラーにとって役立つというよりも混乱を招く可能性があります...?

現在最新の WiX 3.7.1224.0 を使用しています。


TheESJ の回答に対する 1 つのコメント: 定義済みの PackageGroupRef を使用しても、ローカル ファイルを指定してダウンロードを回避できます。ブートストラップ EXE ファイルの下の「redist」フォルダに配置するだけで、ダウンロードせずに存在する場合はそこから取得されます。昨日、インストールに失敗した後、ログファイルを介してこの動作を見つけました。

于 2013-01-15T15:43:20.463 に答える
5

PackageGroup を定義する必要はありません。これは WixNetFxExtension に含まれています。http://wix.sourceforge.net/manual-wix3/install_dotnet.htmを参照してください。必要な作業は、wixproj に WixNetFxExtension への参照を含め、PackageGroupRef をここに記載されている PackageGroups の 1 つに追加するだけです: http://wix.sourceforge.net/manual-wix3/wixnetfxextension.htmをチェーンに追加します。

于 2012-11-26T18:14:02.247 に答える