2014-10-13 14 views
6

Qualcuno sa:Forza disinstallare prima di installare qualsiasi versione con installer Wix

  1. Come posso forzare di installazione di Wix di disinstallare qualsiasi copia precedente precedentemente installato, sia minore o maggiore prima di installare una nuova versione del nostro setup.

  2. Se 1) non può essere eseguito durante l'esecuzione di una nuova installazione di minore/maggiore, è possibile visualizzare almeno un messaggio che dice che è stata rilevata una versione precedente e dovrebbe prima essere disinstallata e annullare l'installazione?

Grazie.

UPDATE:

Ho aggiunto il seguente al mio settings.wxi

<Upgrade Id="$(var.UpgradeCode)"> 

    <!-- Populate NEWERPRODUCTFOUND if there is an installed 
     package with the same upgrade code 
     and version is > the version being installed --> 
    <UpgradeVersion 
     Minimum="$(var.CurrentVersion)" 
     IncludeMinimum="no" 
     OnlyDetect="yes" 
     Language="1033" 
     Property="NEWERPRODUCTFOUND" /> 

    <!-- Populate UPGRADEFOUND if there is an installed 
     package with the same upgrade code 
     and the version is between the earliest version defined 
     and the version being installed --> 
    <UpgradeVersion 
     Minimum="$(var.FirstVersion)" 
     IncludeMinimum="yes" 
     Maximum="$(var.CurrentVersion)" 
     IncludeMaximum="no" 
     Language="1033" 
     Property="PREVIOUSVERSIONSINSTALLED" /> 
</Upgrade> 

ho definito quanto segue in MyProduct.wxs

<?define CurrentVersion="5.0.0.18"?> 
<?define FirstVersion="1.0.0.0"?> 
<?define UpgradeCode="c1b1bfa0-9937-49eb-812c-5bac06eff858"?> 

e, infine, ho' ho aggiunto questo al mio <InstallExecuteSequence>

<RemoveExistingProducts Before="InstallInitialize" /> 

Ma ancora non rimuove la vecchia versione quando aumento la mia versione a 5.0.0.19.

Forse sto guardando questo nel modo sbagliato, ma nella mia finestra "Add/Remove Programs", vedo la mia messa a punto elencato come 5.0.0.18 e vedo una seconda voce come 5.0.0.19

Dovrebbe Sto cambiando il codice di aggiornamento ogni volta che cambio la mia versione? Pensavo di aver letto che questo non dovrebbe mai essere cambiato.

Qualche idea?

Grazie.

+1

Se si conoscono tutti i possibili codici di aggiornamento e ProductVersion, non è possibile creare elementi di aggiornamento personalizzati per individuarli e aggiornarli tutti? WiX MajorUpgrade potrebbe già essere sufficiente, ma se non lo è puoi elencare tutto negli elementi di aggiornamento. – PhilDW

+0

@PhilDW Grazie per il feedback. Lo esaminerò ulteriormente. Non ho mai fatto un aggiornamento prima e sto per finire l'installazione vera e propria, quindi sono allo stadio di raccolta informazioni. – Thierry

risposta

11

Ho capito la risposta dopo un sacco di googlando !! Windows Installer non prende in considerazione il numero 4 della versione che è quello che stavo usando, ad esempio 5.0.0.18.

Guarda solo i primi 3 set di numeri che indicano il numero di versione. Una volta che ho cambiato la mia versione in 5.0.18.0 in 5.0.19.0, ha funzionato immediatamente con il codice pubblicato nella domanda e rimosso la versione precedente e installato su quello più recente.

Si noti che in realtà ho rimosso il codice di cui sopra e finito per usare il MajorUpgrade, invece, come era tutto il necessario:

<MajorUpgrade 
    AllowDowngrades="no" 
    AllowSameVersionUpgrades="no" 
    IgnoreRemoveFailure="no" 
    DowngradeErrorMessage="loc.NewerVersionInstalled" 
    Schedule="afterInstallInitialize"/> 

Spero che questo aiuti qualcun altro!

+0

Per essere chiari, si sta modificando il codice prodotto * e * versione, corretto? – GTAE86

3

Questa è la documentazione per l'attributo AllowSameVersionUpgrades dell'elemento MajorUpgrade. Contiene informazioni pertinenti. L'enfasi è mia.

Se impostata su No (impostazione predefinita), l'installazione di un prodotto con la stessa versione e aggiornare il codice (ma il codice prodotto diverso) è consentito e trattati da MSI come due prodotti.Se impostato su sì, WiX imposta l'attributo msidbUpgradeAttributesVersionMaxInclusive, che indica a MSI di trattare un prodotto con la stessa versione di un aggiornamento principale.

Questo è utile quando due versioni di prodotto si differenziano solo nel quarto campo di versione . MSI ignora specificamente tale campo quando confronta le versioni del prodotto , quindi due prodotti che si differenziano solo nel quarto campo di versione sono lo stesso prodotto e richiedono che questo attributo sia impostato su yes da rilevare.

noti che poiché MSI ignora la quarta versione del prodotto campo, impostando questo attributo si permette anche declassamento quando i primi campi di versione tre prodotti sono identici. Ad esempio, la versione 1.0.0.1 del prodotto "aggiornerà" 1.0.0.2998 perché è vista come la stessa versione (1.0.0) dello . Questo potrebbe reintrodurre gravi bug, quindi la scelta più sicura di consiste nel modificare i primi tre campi di versione e omettere lo di questo attributo per ottenere il valore predefinito di no.

Questo attributo non può essere "sì" quando AllowDowngrades è anche "sì" - AllowDowngrades permette già due prodotti con lo stesso numero di versione aggiornare l'un l'altro.

L'impostazione di questo attributo su yes è probabilmente non ciò che si vuole, però, perché, in base al terzo comma, la versione 5.0.0.18 sarebbe visto come un aggiornamento rispetto alla versione 5.0.0.19. Impostare questo attributo su no e utilizzare il campo della terza versione del prodotto per consentire solo gli aggiornamenti.

Problemi correlati