2009-06-22 11 views
5

Ho un'applicazione Windows Form con un programma di installazione (.msi) già creato con Visual Studio. Ora sto creando un nuovo programma di installazione per la versione 2.0 con la proprietà RemovePreviousVersions impostata su true.Possiamo istruire l'installazione di Visual Studio per mantenere i file esistenti per la reinstallazione?

Ora, quando installo 2.0 su 1.0 rimuove 1.0 e installa completamente 2.0.

C'è un modo che posso dire all'installatore se trovi alcuni file già installati (come i file .xml usati per i dati) quindi non li sovrascrivono?

Sto cercando di avere il mio programma di installazione 2.0 servono i 2 scopi:

  • Installare da zero per i nuovi utenti
  • Gli utenti esistenti potranno aggiornare, ma non perdono le loro personalizzazioni

risposta

2

Quando ero in una situazione simile quello che ho fatto è stato:

I file che sono stati personalizzati da ciascun utente e NON dovrebbero essere toccati dall'installatore NON sono stati inclusi in e MSI (NON nel progetto di installazione di Visual Studio). Quando l'app è stata eseguita per la prima volta, ho generato i file XML tramite il codice.

I file che erano statici (ad esempio, i dati utilizzati per compilare elenchi a discesa) inclusi nel MSI e io posso aggiornarli creando un nuovo MSI con Visual Studio.

Fondamentalmente non includere file personalizzabili nel progetto MSI. Creali in codice per i nuovi utenti.

Non ho mai cercato nel dire al MSI di non aggiornare alcuni file che sono inclusi nel file MSI. La soluzione che ho trovato era perfetta per me. Non so se si può fare.

Spero che questo aiuti.

13

Il progetto di distribuzione in VS non sovrascrive i file. Ciò che accade è che, poiché RemovePreviousVersions è impostato su true, quando si modifica la versione del file di programma e il GUID ProductCode del progetto di installazione, la prima versione verrà disinstallata e quindi verrà eseguita un'installazione pulita della nuova versione.

Per assicurarsi che alcuni file non vengano sovrascritti, di solito li escludo dal contenuto o dai file di output primari (ovunque si trovino) e li aggiungono separatamente al progetto di installazione. In questo modo, puoi impostare individualmente le proprietà per tali file. La proprietà che stai cercando è chiamata Permanent "che se impostata su true non disinstallerà mai il file in questione e quindi non la sovrascriverà mai con una nuova versione. L'unico inconveniente è che quando si disinstalla il prodotto, i file permanenti non andranno rimossi dalle loro posizioni di destinazione, ma nel mio caso (di solito i file DB locali), che è una buona cosa;!.)

Acclamazioni

[modifica] Quanto sopra vale per VS 2008 SP1 Haven' Ho provato su altre versioni, quindi spero che tu stia usando la stessa versione VS o funzioni per la versione che usi

[modifica2] Oh, potresti anche usare la proprietà "Condizione" per ottenere qualcosa di simile ar. Se lo fai, assicurati che "Transitive" sia impostato su True, quindi la Condizione viene sempre valutata. Non l'ho provato con Condizioni, ma questa è un'altra opzione che potresti guardare. Oltre a questi 2, penso che sia abbastanza per i progetti di implementazione VS.

+0

Ottimo, grazie! Questo dovrebbe essere contrassegnato come risposta. –

+1

Le regole per la sostituzione dei file sono [qui] (http://msdn.microsoft.com/en-us/library/aa370531(v=VS.85).aspx). – CyberMonk

+0

Utilizzo di VS2010 SP1. Non funziona per me ... Il file viene sostituito anche se Permanet è impostato su true !!! Viene sostituito quando la data/ora del file su disco è precedente alla data di creazione del pacchetto. In VS2010 non SP1, è stato sostituito quando la data del file su disco era precedente alla data del file utilizzato per la creazione del pacchetto. L'impostazione dell'ora della data del file di origine a 01/01/2001 mi ha risolto molti problemi, ma non funziona più !!! –