Modifica del codice prodotto
Il codice prodotto è un GUID che rappresenta l'identificazione principale di un'applicazione o di un prodotto. Vedere Codici prodotto.
Un aggiornamento che soddisfa le linee guida seguenti in genere non richiede una modifica del codice prodotto e può essere gestito come piccolo aggiornamento o se la versione è da modificare, come aggiornamento secondario:
- L'aggiornamento può ingrandire o ridurre l'albero dei componenti della funzionalità, ma non deve riorganizzare la gerarchia esistente di funzionalità e componenti descritti dalle tabelle Feature e FeatureComponents . Può aggiungere una nuova funzionalità all'albero dei componenti di funzionalità esistente. Se rimuove una funzionalità padre, deve anche rimuovere tutte le funzionalità figlio della funzionalità rimossa.
- L'aggiornamento può aggiungere un nuovo componente a una funzionalità nuova o esistente.
- L'aggiornamento non deve modificare il codice del componente di qualsiasi componente. Di conseguenza, un piccolo aggiornamento o un aggiornamento secondario non deve mai modificare il nome del file di chiave di un componente perché ciò richiederebbe la modifica del codice del componente.
- L'aggiornamento non deve modificare il nome del file .msi del pacchetto di installazione. Poiché modifica il pacchetto, invece, deve modificare il codice del pacchetto. Si noti che questo significa che l'aggiornamento può modificare le tabelle, le azioni personalizzate e i dialoghi nel file .msi senza modificare il nome del file.
- L'aggiornamento può aggiungere, rimuovere o modificare i file, le chiavi del Registro di sistema o i collegamenti dei componenti che non sono condivisi da due o più funzionalità. Se l'aggiornamento modifica un file con versione, tale versione del file deve essere incrementata nella tabella File. Se l'aggiornamento rimuove le risorse, deve anche aggiornare le tabelle RemoveFile e RemoveRegistry per rimuovere eventuali file inutilizzati, chiavi del Registro di sistema o collegamenti già installati.
- L'aggiornamento di un componente condiviso da due o più funzionalità deve essere compatibile con tutte le applicazioni e le funzionalità che usano il componente. L'aggiornamento può modificare la risorsa di un componente condiviso, ad esempio file, voci del Registro di sistema e collegamenti, purché le modifiche siano compatibili con le versioni precedenti. Non è consigliabile aggiungere o rimuovere file, voci del Registro di sistema o collegamenti da un componente condiviso.
- Un piccolo aggiornamento viene fornito come pacchetto di patch di Windows Installer. Un CD-ROM completo del prodotto non viene in genere fornito con un piccolo aggiornamento.
Il codice prodotto deve essere modificato se uno dei seguenti è true per l'aggiornamento:
- Le installazioni coesistenti di prodotti originali e aggiornati nello stesso sistema devono essere possibili.
- Il nome del file .msi è stato modificato.
- Il codice componente di un componente esistente è stato modificato.
- Un componente viene rimosso da una funzionalità esistente.
- Una funzionalità esistente è stata creata in un elemento figlio di una funzionalità esistente.
- Una funzionalità figlio esistente è stata rimossa dalla relativa funzionalità padre.
Si noti che l'aggiunta di una nuova funzionalità figlio, costituita interamente da nuovi componenti, a una funzionalità esistente non richiede la modifica del codice prodotto.
È possibile creare nuove funzionalità figlio includendo msidbFeatureAttributesFollowParent e msidbFeatureAttributesUIDisallowAbsent nel campo Attributi della tabella Funzionalità. Se l'aggiornamento secondario aggiunge solo nuove funzionalità figlio, REINSTALL=ALL è sufficiente forzare l'installazione delle nuove funzionalità figlio. Per altre informazioni, vedere Controllo degli stati di selezione delle funzionalità.
Una nuova funzionalità figlio potrebbe essere nascosta dall'utente. Per sincronizzare lo stato di installazione di una nuova funzionalità figlio con la relativa funzionalità padre, impostare msidbFeatureAttributesFollowParent e msidbFeatureAttributesUIDisallowAbsent bit per la funzionalità figlio.
Argomenti correlati