使用WiX 3.6和Burn进行引导序列验证问题

lan*_*boy 2 wix bootstrapper wix3.6

<?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="SOFTWARE\Microsoft\NET Framework Setup\NDP\v3.5" Value="SP"
                         Variable="DotNetFramework35SP1InstallRegValue" />
    <util:RegistrySearch Id="FindDotNet40FullInstallRegValue" Root="HKLM"
                         Key="SOFTWARE\Microsoft\NET Framework Setup\NDP\v4\Full" Value="Install"
                         Variable="DotNetFramework40FullInstallRegValue" />

    <Chain>
      <ExePackage Id="DotNet3.51" Cache="no" Compressed="no" Vital="no"
                  PerMachine="yes" Name="DotNet3.51"
                  SourceFile=".\sources\dotnetfx35sp1_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=".\sources\dotnetfx40_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=".\sources\client_win32-setup.exe" />
    </Chain>

  </Bundle>
Run Code Online (Sandbox Code Playgroud)

好的,这是我的源代码.比如,一台机器永远不会安装.NET 3.5 SP1和.NET 4.0.所以,现在我运行setup.exe文件.我故意取消.NET 3.5 SP1和.NET 4.0安装,但它仍然执行以安装client_win32-setup.exe ...如果在客户端安装之前只有前两个成功安装,我如何检查条件?

但后来我添加了detectcondition,它从未像我预期的那样工作.所述DetectCondition = "NOT((DotNetFramework35SP1InstallRegValue = 1)AND(DotNetFramework40FullInstallRegValue = 1))"被预先执行,而不是后的.NET安装.

  <ExePackage Id="ClientInstall" Cache="no" Compressed="no" Vital="yes"
              PerMachine="yes" Name="ClientInstall"
              SourceFile=".\sources\client_win32-setup.exe"
              DetectCondition="NOT ((DotNetFramework35SP1InstallRegValue=1) AND (DotNetFramework40FullInstallRegValue=1))"  />
Run Code Online (Sandbox Code Playgroud)

有没有办法解决这种序列验证问题?

Rob*_*ing 5

你所看到的是预期的行为.Burn创建了一个"计划",定义了应该完成的所有工作并执行它.一旦计划好,就会有一个前进的进展,直到一个重要的包导致失败,然后发生回滚.听起来您需要ClientInstall在标记包之前使用其中一个ExePackage Vital="yes",因此如果未安装,则安装不会继续.