<?xml version="1.0" encoding="UTF-8"?> <Wix xmlns="http://schemas.microsoft.com/wix/2006/wi" xmlns:util="http://schemas.microsoft.com/wix/UtilExtension"> <Bundle Name="My Test Program" Version="1.0.0.0" Manufacturer="Microsoft" UpgradeCode="cc7cfeae-c3a4-4430-841e-f927de3f9f95">
<BootstrapperApplicationRef Id="WixStandardBootstrapperApplication.RtfLicense" />
<util:RegistrySearch Id="FindDotNet35SP1InstallRegValue" Root="HKLM"
Key="SOFTWAREMicrosoftNET Framework SetupNDPv3.5" Value="SP"
Variable="DotNetFramework35SP1InstallRegValue" />
<util:RegistrySearch Id="FindDotNet40FullInstallRegValue" Root="HKLM"
Key="SOFTWAREMicrosoftNET Framework SetupNDPv4Full" Value="Install"
Variable="DotNetFramework40FullInstallRegValue" />
<Chain>
<ExePackage Id="DotNet3.51" Cache="no" Compressed="no" Vital="no"
PerMachine="yes" Name="DotNet3.51"
SourceFile=".sourcesdotnetfx35sp1_full_x86_x64.exe"
InstallCommand="/passive /promptrestart" Permanent="yes"
DownloadUrl="http://webserver/dependencies/dotnetfx35sp1_full_x86_x64.exe"
DetectCondition="DotNetFramework35SP1InstallRegValue=1" />
<ExePackage Id="DotNet4.0" Cache="no" Compressed="no" Vital="no"
PerMachine="yes" Name="DotNet4.0"
InstallCommand="/passive /promptrestart" Permanent="yes"
SourceFile=".sourcesdotnetfx40_full_x86_x64.exe"
DownloadUrl="http://webserver/dependencies/dotnetfx40_full_x86_x64.exe"
DetectCondition="DotNetFramework40FullInstallRegValue=1" />
<ExePackage Id="ClientInstall" Cache="no" Compressed="no" Vital="yes"
PerMachine="yes" Name="ClientInstall"
SourceFile=".sourcesclient_win32-setup.exe" />
</Chain>
</Bundle>
好的,这是我的源代码。比如说,一台机器从未安装过。net 3.5 SP1和。net 4.0。所以,现在我运行setup.exe文件。我故意取消。net 3.5 SP1和。net 4.0安装,但它仍然执行安装client_win32-setup.exe…如果在安装客户端之前只有前两个已成功安装,如何检查条件?
但后来我添加了detectcondition,它从来没有像我预期的那样工作。The DetectCondition="NOT ((DotNetFramework35SP1InstallRegValue=1) AND (DotNetFramework40FullInstallRegValue=1))"是预先执行的,而不是在。net安装之后。
<ExePackage Id="ClientInstall" Cache="no" Compressed="no" Vital="yes"
PerMachine="yes" Name="ClientInstall"
SourceFile=".sourcesclient_win32-setup.exe"
DetectCondition="NOT ((DotNetFramework35SP1InstallRegValue=1) AND (DotNetFramework40FullInstallRegValue=1))" />
是否有一种方法来解决这种序列验证问题?
您所看到的是预期的行为。Burn创建了一个"计划",其中定义了所有应该完成的工作并执行它。一旦计划好,就会有向前的进展,直到一个重要的包导致失败,然后发生回滚。听起来,您需要在ClientInstall
包之前将其中一个exeppackages标记为Vital="yes"
,因此如果没有安装它,则不会继续安装。