(small) Updates and (minor, major) Upgrades

Tipi di aggiornamenti

Windows Installer supporta tre tipi di aggiornamenti del prodotto: piccoli aggiornamenti, aggiornamenti minori e aggiornamenti maggiori. I tre tipi di aggiornamenti sono definiti come segue.

A small update
consiste in cambiamenti al prodotto, come hot fix, così piccoli che non è necessario o desiderato alcun cambiamento alla versione del prodotto. (Uno svantaggio dei piccoli aggiornamenti è che i programmi esterni, compresi gli installatori per le versioni successive del vostro prodotto, non saranno in grado di distinguere un prodotto con il piccolo aggiornamento applicato da uno senza il piccolo aggiornamento).
A minor upgrade
è un cambiamento al prodotto abbastanza grande da meritare un cambiamento alla versione del prodotto, come l'aggiornamento della versione 1.1 alla 1.2, ma in cui non ci sono stati cambiamenti significativi all'organizzazione del setup tra le versioni. Il comportamento durante l'installazione di un aggiornamento minore è di installare sopra il prodotto esistente.
A major upgrade
include modifiche sostanziali al prodotto, come l'aggiornamento della versione 1.2 alla 2.0. Un aggiornamento importante può contenere cambiamenti significativi all'architettura del setup. Il comportamento durante l'installazione di un aggiornamento importante può essere quello di disinstallare la versione precedente e installare quella nuova, o di installare sopra la versione precedente e poi rimuovere qualsiasi dato residuo.

Per una versione precedente del prodotto che è stata installata con un setup legacy (non-MSI), sarà normalmente necessaria un'azione personalizzata per disinstallare o modificare l'installazione del prodotto esistente.
Un aggiornamento può essere impacchettato per la distribuzione al sistema di destinazione come un'installazione completa (pacchetto MSI). Un aggiornamento impacchettato come installazione completa può essere creato (usando azioni personalizzate, interruttori a riga di comando o un lanciatore di setup) per aggiornare un prodotto esistente, se presente, o altrimenti per comportarsi come una prima installazione.

Un aggiornamento può anche essere confezionato come un file patch di Windows Installer (un file con estensione MSP). Una patch di Windows Installer contiene cambiamenti tra i file (e altri dati) e le tabelle MSI nelle versioni precedenti e successive. Le differenze di file memorizzate in una patch possono essere binarie, differenze a livello di byte, possibilmente risultanti in un prodotto molto più piccolo di un aggiornamento confezionato come un pacchetto di installazione completo. Un aggiornamento confezionato come file patch può essere usato solo per aggiornare un prodotto esistente e installato, e non può essere usato come prima installazione.

Piccoli aggiornamenti e upgrade minori sono comunemente confezionati come patch, mentre gli upgrade maggiori sono solitamente confezionati come pacchetti di installazione completi.

Un malinteso comune è che le patch siano un tipo separato di aggiornamento, al contrario di un meccanismo di confezionamento. In effetti, il processo di sviluppo delle patch implica prima la progettazione di un aggiornamento minore o maggiore, e poi il confezionamento come patch. Prima di creare una patch, si raccomanda di testare l'aggiornamento come un pacchetto di installazione completo.

Distribuzione di aggiornamenti e patch

La prima volta che si esegue un pacchetto di installazione MSI su un particolare sistema, Windows Installer memorizza il database MSI nella directory nascosta %WINDIR%\Installer. Per impostazione predefinita, quando si esegue lo stesso pacchetto una seconda volta o successivamente sullo stesso sistema, Windows Installer esegue il pacchetto in modalità di manutenzione e utilizza il database nella cache. Un pacchetto è tipicamente progettato per visualizzare un diverso insieme di finestre di dialogo durante l'installazione iniziale e durante le installazioni in modalità di manutenzione.

Durante l'installazione iniziale, il database MSI è memorizzato nella cache del sistema dell'utente, ma i file di dati del prodotto non lo sono. Se un'operazione di manutenzione ha come risultato un file che deve essere installato, MSI richiede l'accesso alla fonte di installazione originale e chiede all'utente di localizzare la fonte se non può essere trovata (per esempio, se l'installazione è stata eseguita da un CD-ROM che non è più nel drive). Per questo motivo, dovreste creare una release con il database MSI esterno a un lanciatore di setup, o creare un lanciatore di setup che memorizza l'installazione nella cache della macchina locale.

Progettare un'installazione adatta all'aggiornamento

Il design dei vostri progetti di installazione - l'organizzazione delle caratteristiche, dei componenti e dei percorsi chiave di un prodotto - ha un impatto sull'efficacia dei futuri aggiornamenti. L'efficacia di un aggiornamento o di una patch è misurata da quanto segue:
  1. Usare i file di versione delle chiavi ogni volta che è possibile.
  2. Dividete il vostro prodotto in serie discrete di funzioni (caratteristiche).
  3. Memorizza i dati di registro configurabili dall'utente in una funzione separata.
  4. I valori delle proprietà MSI non vengono salvati automaticamente durante l'installazione iniziale.
  5. Le nuove sottocaratteristiche dovrebbero essere contrassegnate come "richieste" (required) e "seguire il genitore" (follow parent).
  6. Se il tuo aggiornamento minore rimuove dei dati (file, impostazioni di registro, ecc.) da un componente, compila le tabelle "Remove" corrispondenti.
  7. Cambia la versione del prodotto MSI per ogni nuova release.
  8. Quando costruisci il tuo pacchetto di aggiornamento, usa Patch Optimization nelle impostazioni di compilazione.
  9. Quando si genera una patch per un'installazione compressa, utilizzare un'immagine amministrativa.
  10. Quando si genera una patch, entrambe le versioni dovrebbero avere la stessa disposizione dei media.


Definizioni

Major

Numero di versione maggiore, per esempio 1 nella versione 1.0.2.444
Contiene ampie nuove funzioni ed è un nuovo sviluppo basato sulla versione precedente.

Minor

Numero di versione minore, per esempio 0 nella versione 1.0.2.444
Software aggiornato con ampi miglioramenti alle caratteristiche esistenti e poche nuove caratteristiche. Il codice del prodotto Windows rimane invariato.

Revision

Numero di build, per esempio 2 nella versione 1.0.2.444
Service Pack o Support Update è un aggiornamento del software con miglioramenti di dettaglio e correzioni di bug. Con il service pack viene aumentato il numero di build e, a seconda dell'entità del miglioramento, il numero di revisione.

Build

Numero di compilazione, per esempio 444 nella versione 1.0.2.444
Patch, noto anche come hotfix o quickfix, è un aggiornamento che viene rilasciato per la risoluzione dei problemi o che spesso include una nuova / migliorata caratteristica che è urgentemente necessaria per un utente (patch cliente). La patch aumenta solo il numero di build.

Package Code

Parte del Summary Information Stream, il codice del pacchetto identifica un particolare database. Il codice del pacchetto non è una proprietà di Windows Installer. Qualsiasi due database .msi con codici di pacchetto identici devono avere contenuti identici. Pertanto, dovresti cambiare il codice del pacchetto per ogni build.

ProductVersion

Questa è una proprietà di Windows Installer che identifica la versione del prodotto. Notate che Windows Installer usa solo i primi tre campi della proprietà ProductVersion per confrontare le versioni. Per esempio, per una versione del prodotto di 1.2.3.4, il 4 viene ignorato. (Notate che questo è vero per i confronti dei valori di ProductVersion, e non per le versioni dei file).

ProductCode

Questa è una proprietà di Windows Installer che identifica il GUID di un prodotto. Windows Installer tratta due prodotti con diversi GUID ProductCode come non correlati, anche se i valori per la proprietà ProductName sono gli stessi.

UpgradeCode

Questa è una proprietà di Windows Installer che identifica il GUID che rappresenta un insieme di prodotti correlati. L'UpgradeCode dovrebbe essere coerente tra diverse versioni e lingue di una famiglia di prodotti correlati in modo che possa essere utilizzato per cercare versioni correlate del prodotto che sono già installate. Puoi impostare l'UpgradeCode per un aggiornamento nella vista Aggiornamenti.


Major Upgrade vs. Minor Upgrade vs. Small Update

Requirement for the Upgrade Use a Major Upgrade? Use a Minor Upgrade? Use a Small Update? Note
Change the name of the .msi package Yes No No The default file name is taken from the Product Name property, provided the .msi file is not compressed in a Setup.exe installation launcher.
Enable end users to install earlier versions and the latest version on the same machine Yes No No
Add a new subfeature Yes In some cases In some cases If the new subfeature consists of new components only, you can use a small update, a minor upgrade, or a major upgrade. If the new subfeature consists of existing components, you must use a major upgrade.
Move or delete a feature in the product tree Yes No No
Add a new component to a new feature Yes Yes Yes
Add a new component to an existing feature Yes Yes Yes
Move or delete a component in the product tree Yes No No
Change the component code of an existing component Yes No No
Change the key file of a component Yes No No
Add, remove, or modify any of the following: files, registry keys, or shortcuts Yes Yes Yes If the file, registry key, or shortcut is in more than one component and the component is shared by two or more features, a major upgrade must be used.
Start with an MSI Database or Transform project Yes No No

Codes that Need to Be Changed for the Different Types of Upgrades

Package Code Product Version Product Code Upgrade Code
Small Update ❲✘❳
Minor Upgrade ❲✘❳ ❲✘❳
Major Upgrade ❲✘❳ ❲✘❳ ❲✘❳