2013-06-20 14 views
6

Sto eseguendo l'aggiornamento principale e disinstallando il prodotto esistente prima di installare la nuova versione. Ma voglio mantenere il file di configurazione esistente.Wix CopyFile prima di disinstallare e ripristinare dopo la disinstallazione

Poiché la versione precedente non aveva Permanent = "yes", rimuove il file di configurazione durante la disinstallazione.

E come posso fare qualcosa di simile, fare una copia di "app.config" come "app.config.bak" prima della disinstallazione. Dopo la disinstallazione, ripristinalo da "app.config.bak" a "app.config".

<DirectoryRef Id="INSTALLDIR"> 
    <Component Id="BackupConfigComponent" Guid="87368AF7-4BA2-4302-891A-B163ADDB7E9C"> 
    <CopyFile Id="BackupConfigFile" SourceDirectory="INSTALLFOLDER" SourceName="app.config" DestinationDirectory="INSTALLFOLDER" DestinationName="app.config.bak" /> 
    </Component> 
</DirectoryRef> 

<DirectoryRef Id="INSTALLDIR"> 
    <Component Id="RestoreConfigComponent" Guid="87368AF7-4BA2-4302-891A-B163ADDB7E9C"> 
    <CopyFile Id="RestoreConfigFile" SourceDirectory="INSTALLFOLDER" SourceName="app.config.bak" DestinationDirectory="INSTALLFOLDER" DestinationName="app.config" /> 
    </Component> 
</DirectoryRef> 


<InstallExecuteSequence> 
    <Custom Action="BackupConfigFile" After="InstallInitialize" /> 
    <RemoveExistingProducts After="InstallInitialize" /> 
    <Custom Action="RestoreConfigFile" After="InstallInitialize" /> 
</InstallExecuteSequence> 

Grazie

risposta

3

Tutto quello che dovete fare è cambiare <Custom Action="RestoreConfigFile" After="InstallInitialize" />-<Custom Action="RestoreConfigFile" After="RemoveExistingProducts " />

Si tratta semplicemente di un problema di temporizzazione che si stanno avendo. Stai dicendo a tutte e tre le azioni che devono essere eseguite dopo InstallInitialize, quindi è molto probabile che non stiano nell'ordine in cui sono scritte. . E 'sempre una migliore idea di elencare esplicitamente quale ordine li volete in una migliore, soluzione completa, potrebbe essere:

<Custom Action="BackupConfigFile" After="InstallInitialize" /> 
<RemoveExistingProducts After="BackupConfigFile" /> 
<Custom Action="RestoreConfigFile" After="RemoveExistingProducts " /> 

EDIT: (Basato su commenti) Per creare un'azione personalizzata nel MSI si vuole è necessario creare un elemento CustomAction. È necessario anche il codice per la creazione di un'azione personalizzata. Tuttavia, se si sta solo tentando di copiare un file, suggerirei di utilizzare l'elemento CopyFile. È molto più facile e più pulito che seguire tutti i passaggi di azione personalizzati per fare ciò che penso tu stia andando.

+0

Si dice Errore Il valore dell'attributo Custom/@ After, 'RemoveExistingProducts', non è un identificatore legale. Gli identificatori possono contenere caratteri ASCII A-Z, a-z, cifre, caratteri di sottolineatura (_) o punti (.). Ogni identificatore deve iniziare con una lettera o un trattino basso. –

+0

Ok era dovuto allo spazio, ma ora dice, Riferimento non risolto al simbolo 'CustomAction: BackupConfigFile' nella sezione 'Prodotto: *'. –

+1

Hai creato un'azione personalizzata con il nome BackupConfigFile? Questa non è un'azione personalizzata standard che Windows Installer fornirà per te. – Adkins

Problemi correlati