Usamos wix para crear nuestras configuraciones. Para la actualización, utilizamos las principales actualizaciones como se muestra en this answer by Rob Mensching. (En las versiones más nuevas de wix, puede usar el elemento MajorUpgrade). Normalmente, esto funciona bien. El producto anterior se elimina, luego se instala el nuevo producto.El instalador de Windows elimina el archivo versionado durante la actualización del producto, en lugar de degradarlo
Sin embargo, aparentemente lo anterior no es completamente equivalente a la desinstalación manual del producto anterior y la instalación manual del nuevo producto.
Consideremos por ejemplo el siguiente escenario:
- versión 1.0 de nuestro producto se libera, que contiene la versión 5.0 de un DLL thirdparty
- versión 1.1 de nuestro producto se libera, que contiene la versión 5.1 de la misma thirdparty dll
- se lanza la versión 1.2 de nuestro producto, bajando de categoría a la versión 5.0 de la DLL de terceros porque descubrimos que la nueva versión presentaba más problemas de los que resolvía.
parecer con la lógica de actualización wix ligada arriba, la DLL 3rdparty desaparecerá al actualizar de liberación 01/01 a 01/02. Una reparación es necesaria para restaurarlo.
¿Hay alguna otra manera de actualizar, que funcionaría para este escenario? Creo que lo que estoy buscando es una lógica de actualización que permita la degradación de los componentes, comportándose exactamente como si uno desinstalara manualmente el producto anterior y luego instalara manualmente el nuevo producto.
La programación 'RemoveExistingProducts' después de' InstallFinalize' tiene otro efecto no deseado: el dll se mantiene en la versión más reciente. También consideré anular la versión del archivo en la configuración, pero esto tiene la desafortunada consecuencia de que tendré que actualizar manualmente ese número de versión falsa cada vez que cambie el DLL :-( –
¿Por qué tendrías que seguir actualizándolo? ¿No estaba allí? solo una versión específica que no funciona, y está anulando eso para que la anterior se reinstale? Quizás mienta de que es exactamente la versión más nueva y configure REINSTALLMODE = emus. –
El problema ya ocurre durante ** el cálculo de costos. ** En este punto, MSI ve que hay una versión más nueva y decide no instalar el nuevo archivo. Verá 'No permitir la instalación del componente: XXX ya que el mismo componente con el archivo de clave versionado más alto existe' en el registro. tendrías que programar RemoveExistingProducts ** antes de ** los costos. No veo cómo se podría hacer eso sin infringir ICE27 e ICE63. – Andreas