2012-07-31 16 views
5

Quiero personalizar mi instalador para mostrar el cuadro de diálogo personalizado cuando la versión anterior ya está instalada: después del diálogo de bienvenida, el usuario debería ver un cuadro de diálogo personalizado OldVersionDlg con información que la versión anterior se encontró y se desinstalará automáticamente.Wix: mostrar cuadro de diálogo personalizado si se encontró versión anterior

Pero por alguna razón propiedad establecida por UpgradeVersion elemento siempre null cuando lo compruebo en UI/Publish Dialog.

Aquí están los fragmentos de código esenciales.

Product.wxs:

<Product Id="*" Version="$(var.Version)" UpgradeCode="$(var.ProductId)" 
     Language="1033" Name="$(var.ProductFullName)" Manufacturer="$(var.Manufacturer)"> 
    <Package Description="$(var.ProductDescription)" InstallerVersion="200" Compressed="yes" 
      Manufacturer="$(var.Manufacturer)" /> 

    <Property Id="PREVIOUSVERSIONSINSTALLED" Secure="yes" /> 
    <Upgrade Id="$(var.ProductId)"> 
    <UpgradeVersion Minimum="1.0.0.0" Maximum="$(var.Version)" 
        Property="PREVIOUSVERSIONSINSTALLED" 
        IncludeMinimum="yes" IncludeMaximum="no" /> 
    </Upgrade> 

    <InstallExecuteSequence> 
    <RemoveExistingProducts Before="InstallInitialize" /> 
    </InstallExecuteSequence> 
</Product> 

WixUI_Wizard.wxs:

<Publish Dialog="WelcomeDlg" Control="Next" Event="NewDialog" Value="OldVersionDlg">PREVIOUSVERSIONSINSTALLED</Publish> 
<Publish Dialog="WelcomeDlg" Control="Next" Event="NewDialog" Value="SetupTypeDlg">NOT Installed</Publish> 

El botón Siguiente no funciona. He registrado los registros que PREVIOUSVERSIONSINSTALLED se establece después de FindRelatedProducts. Si lo uso en condiciones en Product.wxs, entonces todo está bien. Pero en la configuración de la interfaz de usuario siempre es null.

Gracias por cualquier ayuda.

Respuesta

2

El problema fue causado por la segunda línea en WixUI_Wizard.wxs. Por algún motivo, WiX siempre lo usa. Así, para implementar la comprobación de la versión anterior que necesitamos para excluir PREVIOUSVERSIONSINSTALLED de la segunda condición:

<Publish Dialog="WelcomeDlg" Control="Next" Event="NewDialog" Value="OldVersionDlg">PREVIOUSVERSIONSINSTALLED</Publish> 
<Publish Dialog="WelcomeDlg" Control="Next" Event="NewDialog" Value="SetupTypeDlg">NOT Installed AND NOT PREVIOUSVERSIONSINSTALLED</Publish> 
+0

Otra solución es añadir la Publish/@ atributo Orden, y establecer el primer cuadro de diálogo de pedido = "1" y el segundo a Order = "2". Lo que probablemente sucedió es que ambas condiciones del evento de publicación se evaluaron como verdaderas, por lo que el instalador de MSI eligió la primera acción de publicación definida. Al agregar Order, le dice al instalador qué acción ejecutar si ambos eventos de publicación tienen condiciones verdaderas. Una nota, el evento de pedido es contra intuitivo, y en realidad es el valor de orden superior que se prefiere cuando ambas condiciones son verdaderas. Puedes pensarlo más como un peso, donde gana el mayor peso. – pje

+0

@kirmir ¿Dónde puedo encontrar el archivo WixUI_Wizard.wxs? TI debería venir con la instalación de WiX? No puedo encontrarlo. ¿Sabes cómo hacer que esto funcione con la versión 3.10? – misshomme

+0

@micmica, este archivo se creó manualmente y describe el orden de los diálogos. Usé la versión 3.5 cuando se formuló la pregunta. No sé acerca de la versión más nueva, pero creo que no debería haber ninguna diferencia. –

Cuestiones relacionadas