Problema de validación de la secuencia Bootstrapping con WiX 3.6 y Burn
bootstrapper wix3.6 (1)
<?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>
De acuerdo, este es mi código fuente. Digamos que nunca se instala una máquina con .NET 3.5 SP1 y .NET 4.0. Entonces, ahora ejecuto el archivo setup.exe. A propósito, cancelé la instalación de .NET 3.5 SP1 y .NET 4.0, pero luego todavía se ejecuta para instalar el archivo client_win32-setup.exe ... ¿Cómo verifico la condición si solo los dos primeros se instalaron correctamente antes de la instalación del cliente?
Pero luego agregué la condición de detección, y nunca funcionó como esperaba. DetectCondition = "NOT ((DotNetFramework35SP1InstallRegValue = 1) AND (DotNetFramework40FullInstallRegValue = 1))" se pre-ejecuta y no después de la instalación de .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))" />
¿Hay alguna manera de resolver este tipo de problema de validación de secuencia?
Lo que estás viendo es el comportamiento esperado. Burn crea un "plan" que define todo el trabajo que se debe hacer y lo ejecuta. Una vez planificado, hay progreso hacia adelante hasta que un paquete vital causa una falla y luego se produce la reversión. Parece que necesita uno de los ExePackages antes de que el paquete ClientInstall
se marque Vital="yes"
, por lo que la instalación no continuará si no está instalado.