Проблема проверки последовательности начальной загрузки с использованием WiX 3.6 и Burn - PullRequest
2 голосов
/ 14 ноября 2011
<?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>

Хорошо, это мой исходный код.Скажем, машина никогда не устанавливается с .NET 3.5 SP1 и .NET 4.0.Итак, теперь я запускаю файл setup.exe.Я намеренно отменяю установку .NET 3.5 SP1 и .NET 4.0, но затем он все еще выполняется для установки client_win32-setup.exe ... Как проверить условие, если только первые два успешно установлены перед установкой клиента?

Но потом я добавил функцию обнаружения, и она никогда не работала так, как я ожидал. 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))"  />

Есть способрешить эту проблему проверки последовательности?

1 Ответ

5 голосов
/ 15 ноября 2011

То, что вы видите, - это ожидаемое поведение.Burn создает «план», который определяет всю работу, которая должна быть выполнена, и выполняет ее.После того, как запланировано, будет продвижение вперед, пока жизненно важный пакет не вызовет сбой, а затем произойдет откат.Похоже, вам нужен один из ExePackages до того, как пакет ClientInstall будет помечен как Vital="yes", поэтому установка не будет продолжаться, если он не установлен.

...