Pregunta

Tengo un instalador que no parece estar siguiendo las reglas del componente MSI en la hora de instalación. Aquí está el escenario:

OS: Windows 7 x64

Producto A instala un conjunto de archivos conectados a un componente con GUID "123ABC" en C: \ Archivos de programa \ Archivos comunes \ Foo. El componente tiene los siguientes archivos:

foo.dll, versión 1.0.0.0, (keypath)
foo.sys, versión 1.0.0.0
foo.inf, sin versiones de
foo.cat, sin versiones

El producto B instala el mismo conjunto de archivos conectados a la misma GUID del componente "123ABC" en la misma ruta C: \ Archivos de programa \ Archivos comunes \ foo. El componente tiene los siguientes archivos:

foo.dll, versión 1.0.0.1, (keypath)
foo.sys, versión 1.0.0.0
foo.inf, sin versiones de
foo.cat, sin versiones

El producto A se instala primero, y el producto B no realiza una actualización del producto A, solo comparten un MSM común que contiene el componente "123ABC". Mi expectativa es que cuando se instala el producto B, MSI comparará las versiones de Keypath de foo.dll y determinará que el producto b's foo.dll es más nuevo. Luego, los cuatro archivos asociados con el componente "123ABC" sobrescribirán los archivos existentes en el disco que fueron instalados por el producto A. Esto no está sucediendo :( En su lugar, este es el conjunto de archivos resultante: C: \ Archivos de programa \ Archivos comunes \ foo
foo.dll, versión 1.0.0.1 (del producto b)
foo.sys, versión 1.0.0.0 (del producto A)
foo.inf, sin versión (del producto A)
foo.cat, sin versión (del producto b)

Solo se sobrescribe el archivo DLL y el CAT. Desde el archivo de registro de MSI puedo ver lo siguiente:

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

Pensé que los componentes MSI instalaron todos los archivos asociados en función de si se debe instalar o no el teclado. ¿Qué podría causar que cada archivo asociado con el mismo componente se comparará individualmente?

¿Fue útil?

Solución

El estado de Keypath determina si se actuará un componente.Los recursos dentro del componente luego siguen sus reglas: por ejemplo, los archivos siguen al Reglas de versiones de archivo .

Otros consejos

Suponiendo que cada producto esté utilizando las reglas de costos predeterminadas (OMUS) Módulos de combinación que contienen componentes compartidos deben funcionar.FWIW, es posible que desee considerar hacer una MSI que consume este módulo de combinación y luego agregarlo a un bootstrapper para ambos productos.El servicio de parches puede ser más limpio de esta manera.

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top