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="4.5.50709") AND (NOT VersionNT64 OR (Netfx4x64FullVersion="4.5.50709"))"
InstallCondition="(VersionNT >= v6.0 OR VersionNT64 >= v6.0) AND (NOT (Netfx4FullVersion="4.5.50709" OR Netfx4x64FullVersion="4.5.50709"))"
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 >= $(var.NetFx45MinRelease)"
【讨论】:
谢谢,由于某种原因,我只能找到最高 .net 4 的 wix 条件...安装软件包也不是问题...这是软件包安装,但随后在他们修复的安装。 我不明白你的意思。请在某处发布您的刻录日志。 没关系...更好的检测条件实际上似乎可以解决问题,谢谢!我之前的意思也是,在安装过程中,引导程序会安装每个 exe,然后在同一安装过程中立即修复每个 exe。这对我来说似乎真的没有多大意义,但只要它现在有效,我就不太担心了。以上是关于Wix 安装然后立即尝试修复的主要内容,如果未能解决你的问题,请参考以下文章