1

我正在尝试使用 WixStandardBootstrapperApplication 运行引导程序应用程序。到目前为止,它适用于我需要它做的一切,甚至在安装过程中处理重启。过程是这样的——我检查计算机上是否安装了 .net 4.5,如果没有,则安装 .net 4.5。安装后,burn 然后知道要重新启动,因为我处理了退出代码。恢复后,安装程序会处理另外三个 .exe 文件,其中一个取决于 .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 回答