2012-07-31 11 views
5

Desidero personalizzare il mio programma di installazione per mostrare la finestra di dialogo personalizzata quando la versione precedente è già installata: dopo la finestra di dialogo di benvenuto l'utente dovrebbe vedere una finestra di dialogo personalizzata OldVersionDlg con informazioni che la versione precedente è stata trovata e verrà disinstallata automaticamente.Wix: mostra finestra di dialogo personalizzata se è stata trovata la versione precedente

Ma per qualche motivo la proprietà viene impostata dall'elemento UpgradeVersion sempre null quando lo controllo in condizione in UI/Publish Dialog.

Ecco alcuni frammenti di codice essenziali.

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> 

Il pulsante Avanti non funziona. Ho verificato nei registri che PREVIOUSVERSIONSINSTALLED è impostato dopo FindRelatedProducts. Se lo uso in condizioni in Product.wxs, allora tutto è OK. Ma nella configurazione dell'interfaccia utente è sempre null.

Grazie per qualsiasi aiuto.

risposta

2

Il problema è stato causato dalla seconda riga in WixUI_Wizard.wxs. Per qualche ragione, WiX lo usa sempre. Così, per implementare il controllo di versione precedente abbiamo bisogno di escludere PREVIOUSVERSIONSINSTALLED dalla seconda condizione:

<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

Un'altra soluzione è quella di aggiungere il Publish/@ attributo Ordine, e impostare la prima finestra di ordinazione = "1" e il secondo per ordinare = "2". Quello che probabilmente stava accadendo è che entrambe le condizioni degli eventi di pubblicazione sono state valutate come vere, e quindi il programma di installazione MSI ha scelto la prima azione di pubblicazione definita. Aggiungendo Ordine, questo indica al programma di installazione quale azione eseguire se entrambi gli eventi di pubblicazione presentano condizioni reali. Una nota, l'evento Order è contro intuitivo, ed è in realtà il valore più alto dell'Ordine che è preferito quando entrambe le condizioni sono vere. Puoi pensare ad esso più come un peso, dove vince il peso più alto. – pje

+0

@kirmir Dove posso trovare il file WixUI_Wizard.wxs? L'IT dovrebbe venire con l'installazione di WiX? Io non riesco a trovarlo. Sai come farlo funzionare con la versione 3.10? – misshomme

+0

@micmica, questo file è stato creato manualmente e descrive l'ordine delle finestre di dialogo. Ho usato la versione 3.5, quando è stata posta la domanda. Non so sulla versione più recente, ma credo che non ci dovrebbe essere alcuna differenza. –

Problemi correlati