Dispari regole del componente MSI
-
20-12-2019 - |
Domanda
Ho un installatore che non sembra seguire le regole del componente MSI in tempo di installazione. Ecco lo scenario:
OS: Windows 7 x64
Prodotto A Installa un set di file collegati a un componente con GUID "123ABC" in C: \ Programmi \ File Common Files \ Foo. Il componente ha i seguenti file:
foo.dll, versione 1.0.0.0, (Keypath)
foo.sys, versione 1.0.0.0
foo.inf, no versione
foo.cat, nessuna versione
Prodotto B Installa lo stesso set di file collegati allo stesso GUID del componente "123ABC" nello stesso percorso C: \ Programmi \ File Common \ Foo. Il componente ha i seguenti file:
foo.dll, versione 1.0.0.1, (Keypath)
foo.sys, versione 1.0.0.0
foo.inf, no versione
foo.cat, nessuna versione
Prodotto A è installato per primo, e il prodotto B non esegue un aggiornamento del prodotto A, condividono semplicemente un MSM comune che contiene il componente "123ABC". La mia aspettativa è che quando il prodotto B è installato, MSI confronterà le versioni Keypath di foo.dll e determinerà quel prodotto B's Foo.dll è più recente. Quindi tutti e quattro i file associati al componente "123ABC" sovrascriveranno i file esistenti su disco installati dal prodotto A. Questo non sta accadendo :( Invece, questo è il file del file risultante:
C: \ Programmi Files \ File Common \ Foo
foo.dll, versione 1.0.0.1 (dal prodotto B)
foo.sys, versione 1.0.0.0 (dal prodotto A)
foo.inf, no versione (dal prodotto A)
foo.cat, no versione (dal prodotto B)
Solo la DLL e il file Cat vengono sovrascritti. Dal file di registro MSI posso vedere quanto segue:
MSI (s) (4C:F0) [17:29:24:227]: File: C:\Program Files\Common Files\Foo\foo.dll; Overwrite; Won't patch; Existing file is a lower version
MSI (s) (4C:F0) [17:29:24:305]: File: C:\Program Files\Common Files\Foo\foo.sys; Won't Overwrite; Won't patch; Existing file is of an equal version
MSI (s) (4C:F0) [17:29:24:305]: File: C:\Program Files\Common Files\Foo\foo.inf; Won't Overwrite; Won't patch; Existing file is unversioned and unmodified - hash matches source file
MSI (s) (4C:F0) [17:29:24:335]: File: C:\Program Files\Common Files\Foo\foo.cat; Overwrite; Won't patch; Existing file is unversioned and unmodified - hash doesn't match source file
.
Pensavo che i componenti MSI hanno installato tutti i file associati in base al fatto che la tastiera sia installata o meno. Cosa potrebbe far funzionare individualmente ogni file associato allo stesso componente?
Soluzione
Stato Keypath Determina se un componente verrà attivato.Risorse all'interno del componente Seguire le loro regole: ad esempio, i file seguono il Regole di versioning dei file .
Altri suggerimenti
Assumendo che ciascun prodotto sta utilizzando le regole di costo predefinito (OMUS) i moduli di unione contenenti componenti condivisi dovrebbero funzionare.FWIW, potresti voler considerare di creare un MSI che consuma questo modulo unione e quindi aggiungerlo a un bootstrapper per entrambi i prodotti.La mantografica può essere più pulita in questo modo.