Wix 安装然后立即尝试修复

Posted

技术标签:

【中文标题】Wix 安装然后立即尝试修复【英文标题】:Wix installs then immediately tries to repair 【发布时间】:2013-06-21 16:14:13 【问题描述】:

我正在尝试使用 WixStandardBootstrapperApplication 运行引导程序应用程序。到目前为止,它适用于我需要它做的所有事情,甚至在安装过程中处理重启。过程是这样的——我检查计算机上是否安装了 .net 4.5,如果没有,则安装 .net 4.5。安装后,burn 然后知道要重新启动,因为我处理了退出代码。恢复后,安装程序会处理另外三个 .exe 文件,其中一个取决于 .net 安装。在重新启动之前,这一切都运行良好,此时引导程序会尝试修复每个 exe 的安装后运行时间加倍。这不会那么糟糕,除了安装 .net 4.5 需要很长时间以至于翻倍是非常不可取的。我试过省略一个修复命令,我注意到没有任何形式的修复条件,如安装和检测条件。有什么方法可以阻止修复过程?

这是引导程序代码:

<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 的行为成功基本上是一种黑客行为,但在修复问题得到处理之前,他们需要否则安装程序会说它失败。我也尝试从这些命令中删除修复命令,但这似乎根本没有帮助,所以我让它们安静下来,至少它们不会弹出并让用户感到困惑。

【问题讨论】:

【参考方案1】:

您需要为每个不是MsiPackage 的包提供准确的DetectCondition 属性值。 Burn 无法检测到任意 .exe 可能会做什么,所以它依赖于你来告诉它。在没有检测条件的情况下,Burn 将始终安装该软件包。对于 .NET,您应该使用 WiX 中的 DetectCondition

<?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)"

【讨论】:

谢谢,由于某种原因,我只能找到最高 .net 4 的 wix 条件...安装软件包也不是问题...这是软件包安装,但随后在他们修复的安装。 我不明白你的意思。请在某处发布您的刻录日志。 没关系...更好的检测条件实际上似乎可以解决问题,谢谢!我之前的意思也是,在安装过程中,引导程序会安装每个 exe,然后在同一安装过程中立即修复每个 exe。这对我来说似乎真的没有多大意义,但只要它现在有效,我就不太担心了。

以上是关于Wix 安装然后立即尝试修复的主要内容,如果未能解决你的问题,请参考以下文章

修复在 WiX 3.8 中创建的设置时出错

Wix Major升级问题

确定先前软件包版本的 WiX 错误

Microsoft Office 无法验证此应用程序的许可证。修复尝试失败或者已被用户取消。应用程序将立即关闭。

电脑里的“HTTP协议”存在异常项,怎么修复?

Mac感觉慢吗?立即尝试此简单修复