2009-03-18 5 views
13

Ho un MSI costruire utilizzando la versione WiX 3.MSI non installa tutti i file quando viene eseguito RemovePreviousVersion

tutti gli installatori precedenti per il prodotto che stiamo schierando lavorato bene con la configurazione specificata (cioè: se la versione precedente esiste , rimuovere, quindi installare la nuova versione) - tuttavia, i nuovi MSI che creiamo non installano tutti i file quando vengono eseguiti attraverso il percorso "remove first".

Se rimuoviamo manualmente l'installazione esistente e quindi eseguiamo la nuova versione, tutti i file sono installati, e quando esamino il file MSI in Orca i file e le funzionalità sono mostrati e sembrano andare bene.

Abbiamo provato a eseguire con registrazione dettagliata e dettagliata attivata (/l*vx), tuttavia, tutto ciò che possiamo vedere se i file non vengono registrati & quindi installato.

Qualche idea o suggerimento? Questo ci sta portando al muro.

+0

i file dell'installazione precedente sono bloccati o in uso? – RobS

+0

anche questo dovrebbe essere contrassegnato come wix –

+0

@Rob Sanders - nessuno dei file è bloccato (da quello che posso vedere). Prima di eseguire la disinstallazione, viene avviato un processo per chiudere l'app in esecuzione. Aggiornamento –

risposta

5

OK, bene a parlare con qualcun altro in cui mi sto ha aiutato a trovare una soluzione al problema.

Abbiamo aggiunto la proprietà REINSTALLMODE e impostarla su amus. Cosa significa questo?

Per impostazione predefinita la proprietà è impostata su omus che significa: Reinstallare se il file è mancante o precedente, riscrivere il registro per hive di computer e utente, reinstallare i collegamenti. La modifica di questo in amus in pratica dice: Reinstallare tutti i file.

Quindi, non sicuro al 100% quale fosse la causa - ho il sospetto che potrebbero esserci stati strani blocchi o qualcosa del genere, ma l'impostazione di amus non ha alcun effetto negativo, quindi continueremo con quello.

Grazie per i suggerimenti.

(Inoltre, ulteriori dettagli su questa proprietà può essere trovato qui: MSDN: REINSTALLMODE Property

3

Come si presenta il passo <RemoveExistingProducts After="">? Potrebbe essere che il processo di recupero sia in esecuzione dopo l'installazione e la rimozione di tutti i file che erano uguali nelle versioni precedenti e attuali.

Ho il mio programma di installazione impostato su <RemoveExistingProducts After="InstallInitialize"> per assicurarsi che sia fatto prima di qualsiasi altra cosa. Non so se sia giusto o no, ma sembra funzionare.

<Upgrade Id="$(var.UpgradeCode)"> 
     <!--Upgrade code found at http://www.nichesoftware.co.nz/blog/200809/upgradable-msi-installations-with-wix --> 
     <!-- Detect any newer version of this product--> 
     <UpgradeVersion Minimum="$(var.version)" IncludeMinimum="no" OnlyDetect="yes" Language="1033" Property="NEWPRODUCTFOUND" /> 

     <!-- Detect and remove any older version of this product--> 
     <UpgradeVersion Maximum="$(var.version)" IncludeMaximum="yes" OnlyDetect="no" Language="1033" Property="OLDPRODUCTFOUND" /> 
    </Upgrade> 
    <CustomAction Id="PreventDowngrading" Error="Newer version already installed"></CustomAction> 
    <InstallExecuteSequence> 
     <!-- Prevent Downgrading--> 
     <Custom Action="PreventDowngrading" After="FindRelatedProducts">NEWPRODUCTFOUND</Custom> 
     <RemoveExistingProducts After="InstallInitialize" /> 
    </InstallExecuteSequence> 
    <InstallUISequence> 
     <!-- Prevent Downgrading--> 
     <Custom Action="PreventDowngrading" After="FindRelatedProducts">NEWPRODUCTFOUND</Custom> 
    </InstallUISequence> 
+0

Grazie per l'input - Anche il mio è impostato su After = "InstallInitialize" - quindi sono ancora in perdita per quale sia la causa di questo problema: | –

+0

@ranomore: l'ID prodotto è impostato su *? – NileshChauhan

+0

sì è impostato su *. –

18

Sulla base della sequenza d'azione personalizzato impostazione predefinita, Windows Installer determina quali file devono essere installati/sovrascritto prima di rimuovere eventuali versioni esistenti di software Windows. Il programma di installazione utilizza il valore della proprietà REINSTALLMODE per indicare come prendere decisioni su quando sovrascrivere i file. Se REINSTALLMODE contiene una "o", installerà solo file in cui la versione è diversa o il file non esiste già; i file con supervisione verranno installati solo se la data di modifica del file è < = la data di creazione (ovvero il file non viene modificato). Se il REINSTALLMODE contiene una "a", verrà sempre installato il file, indipendentemente dalla f qualsiasi versione o informazione data allegata ai file esistenti.

Quello che sta accadendo nel vostro scenario è più probabile la seguente:

  1. Windows Installer determina i file da installare.Decide che alcuni file non devono essere installati (probabilmente perché esistono già e sono della stessa versione o versioni più recenti di quelli dell'MSI).
  2. La versione precedente del software viene rimossa, inclusi i file che Windows Installer ha determinato non è necessario installare.
  3. Il programma di installazione di Windows installa i file per la nuova installazione, ma non installa i file che ha determinato non è necessario installare.

Il risultato finale è che mancano alcuni file dopo l'aggiornamento del software. Impostazione di REINSTALLMODE = amus anziché omus probabilmente risolverà il tuo problema, ma dovresti assicurarti di sapere come questo influisce sul resto dell'installazione. Se sono presenti file che non si desidera vengano sovrascritti, sarà necessario contrassegnare tali componenti su "Non sovrascrivere mai".

+0

Grazie per le informazioni aggiuntive :) –