1

WixStandardBootstrapperApplication を使用してブートストラップ アプリケーションを実行しようとしています。これまでのところ、必要なことはすべてうまく機能し、インストール途中での再起動も処理できます。プロセスは次のようになります。コンピューターに .net 4.5 がインストールされているかどうかを確認し、インストールされていない場合は、.net 4.5 をインストールします。インストール後、終了コードを処理するため、burn は再起動することを認識します。再開時に、インストーラーはさらに 3 つの .exe ファイルを処理します。そのうちの 1 つは .net インストールに依存しています。これはすべて、再起動後まで非常にうまく機能します。再起動後、ブートストラップは実行時間を倍増させるexeのインストール後のそれぞれを修復しようとします。.net 4.5 のインストールに時間がかかりすぎて倍増が非常に望ましくないことを除いて、これはそれほど悪くはありません。修復コマンドを省略しようとしましたが、' インストールおよび検出条件のような形式の RepairCondition がないことに気付きました。修復プロセスを防ぐ方法はありますか?

ブートストラップ コードは次のとおりです。

<Chain>
      <ExePackage Id="NetFx45Redist" Cache="no" Compressed="yes" PerMachine="yes" Permanent="yes" Vital="yes" InstallCommand="/q /norestart" RepairCommand="/q"
              SourceFile="...\...\Setup Files\dotNetFx45_Full_setup.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;))"
              RepairCondition="" >
        <ExitCode Value="1641" Behavior="forceReboot"/>
        <ExitCode Value="3010" Behavior="forceReboot"/>
        <ExitCode Value="0" Behavior="success"/>
        <ExitCode Behavior="error"/>
      </ExePackage>
      <ExePackage
        SourceFile="...\...\Setup Files\Encoder_en.exe"
        InstallCommand="/q"
        RepairCommand="/q">
        <ExitCode Behavior="success"/>
      </ExePackage>
      <ExePackage
        SourceFile="...\...\Setup Files\vcredist_x86.exe"
        InstallCommand="/q"
        RepairCommand="/q">
        <ExitCode Behavior="success"/>
      </ExePackage>
      <ExePackage
        SourceFile="...\...\Setup Files\vcredist_x64.exe"
        InstallCommand="/q"
        RepairCommand="/q">
        <ExitCode Behavior="success"/>
      </ExePackage>
      <!-- installer for actual software at some point -->
</Chain>

これらの他の.exeの動作を成功させるのは基本的にハックであることは知っていますが、修復の問題が処理されるまでは、インストーラーが失敗したと言う必要があります。これらからも修復コマンドを削除しようとしましたが、まったく役に立たないようです。少なくともポップアップしてユーザーを混乱させないように、静かにしました。

4

1 に答える 1

2

DetectConditionではないすべてのパッケージの正確な属性値が必要ですMsiPackage。Burn には、任意の .exe が何を行うかを検出する方法がないため、ユーザーの指示に依存しています。検出条件がない場合、Burn は常にパッケージをインストールします。.NET の場合はDetectCondition、WiXの次を使用する必要があります。

<?define NetFx45MinRelease = 378389?>
...
  <util:RegistrySearch
      Id="NETFRAMEWORK45"
      Variable="NETFRAMEWORK45"
      Root="HKLM"
      Key="SOFTWARE\Microsoft\NET Framework Setup\NDP\v4\Full"
      Value="Release"
      Result="value" />
...
DetectCondition="NETFRAMEWORK45 &gt;= $(var.NetFx45MinRelease)"
于 2013-06-21T16:33:57.137 に答える