我正在尝试使用WixStandardBootstrapperApplication运行一个bootstrapper应用程序。到目前为止,它适用于我需要它做的一切,甚至在安装过程中处理重启。这个过程是这样的 - 我检查计算机上是否安装了.net 4.5,如果没有,则安装.net 4.5。安装后,刻录然后知道重启,因为我处理退出代码。恢复后,安装程序会处理另外三个.exe文件,其中一个文件依赖于.net安装。这一切都很好地运行,直到重新启动之后,此时引导程序尝试修复每个exe的post安装,使运行时间加倍。这不会是那么糟糕,除了安装.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="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的行为是成功的基本上是黑客攻击,但在处理修复问题之前,他们需要安装程序说它失败了。我也试过从这些中删除修复命令,这似乎没有任何帮助,所以我让它们保持安静,所以至少它们不会弹出并使用户感到困惑。
答案 0 :(得分:2)
对于非DetectCondition
的每个包,您需要准确的MsiPackage
属性值。 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)"