2009-10-09 12 views
8

Actualmente todas las actualizaciones funcionan bien cada vez que actualizo a un número de versión más reciente, sin embargo, estoy obteniendo un comportamiento extraño al degradar. Parece que desinstalará la versión existente y luego instalará parcialmente la versión que estoy tratando de instalar, el exe principal aún no existe en la ubicación de destino, pero se crearon accesos directos publicitados. Cuando se abra el acceso directo publicitado, terminará la instalación (presumiblemente se realizará una reparación) y se ejecutará correctamente.WiX "Major Upgrade" no instala completamente la aplicación en la versión anterior

¿Alguien tiene alguna idea de por qué sucede esto?

Mi bloque de actualización se parece a esto:

<UpgradeVersion Minimum="0.0.0.0" Maximum="99.0.0.0" Property="PREVIOUSVERSIONSINSTALLED" IncludeMinimum="yes" IncludeMaximum="no" IgnoreRemoveFailure="yes" />

(El IgnoreRemoveFailure fue un intento de solucionar este problema, pero no parece tener nada hecho)

En mi InstallExecuteSequence I han <RemoveExistingProducts After="InstallValidate" />

también he Product Id="*" y Package Id="*"

El motivo por el que se necesita una versión anterior es porque la aplicación cliente debe ejecutar la misma versión que el servidor para garantizar la compatibilidad y todo el proceso debe automatizarse, de modo que si las versiones cliente/servidor no coinciden al iniciar sesión el usuario puede simplemente hacer clic en "sí" y la versión correcta se descarga, instala e inicia. Esto está funcionando hasta ahora para las actualizaciones, pero para las degradaciones se necesita un paso adicional poco intuitivo, que es reiniciar manualmente la aplicación y luego ver un cuadro de diálogo del instalador de Windows antes de que se inicie.

El resultado final es que independientemente de la actualización o degradación, la versión actual debe desinstalarse por completo y la versión descargada debe estar completamente instalada, por lo que si hay otra forma de hacerlo, también será una buena respuesta.

+0

tengo un sinfín de problemas con este aún hoy en día. WiX agregó un nuevo elemento "MajorUpgrade" que se suponía que haría las cosas más difíciles de equivocarse. Estamos usando esto ahora, pero aun así, las rebajas tienen el mismo problema que antes. La diferencia ahora es que elimina un par de culpables: (1) InstallExecuteSequence (2) Elemento UpgradeVersion. – Trejkaz

Respuesta

2

Permitir degradaciones no se considera la mejor práctica, al menos en parte porque es tan difícil probar cada combinación que admitirá mientras aún sea posible repararlas. ¿No es posible detectar y bloquear este caso en su lugar (sugiera que se elimine primero la versión más nueva) y solo se admite automáticamente el avance?

Si debe hacer que funcione, ¿hay algo en un registro detallado para la instalación de degradación (o para la reparación, deberá configurar la política de registro de la máquina para que se cree esto) que confirma la importante actualización (Me gustaría ver cerca de FindRelatedProducts) o discute por qué el componente para su exe no está instalado? Definitivamente, busque cualquier línea de registro con SELMGR, ya que podrían explicar esto en un escenario de actualización menor.

Dado que un atajo anunciado está en su lugar, parece que en su lugar se anunció el componente. Esto podría indicar violaciones a las reglas de los componentes en una actualización menor (específicamente la adición de un componente en una versión más nueva que parece la eliminación en su versión anterior - vea HeathS's commentary) aunque parece que el Product/@Id='*' debería forzar una actualización importante.

También puede intentar trabajar en un proyecto de muestra, comenzando desde una versión base que tiene una sola característica, componente único y un solo archivo con acceso directo. Si corresponde, agregue otro componente y archivo a la versión actualizada; de lo contrario, simplemente incremente las versiones del archivo. Luego prueba tu escenario inverso. Lentamente agrega cosas hasta que encuentres tu culpable. Luego, espera que sea algo que puedas eliminar de tu producto real, o de lo contrario se puede solucionar.

1

Mi sugerencia es un poco en el lado de "hacer que funcione": podría probar una acción personalizada de reparación silenciosa en caso de rebaja.

+0

No he podido encontrar la forma de programar una reparación como una acción personalizada. ¿Tienes algún enlace que describa esto? – Davy8

+0

Estaba pensando en algo así como ejecutar una acción personalizada con msiexec y usar su msi como fuente (msiexec/fa prod.msi/qn) – Gabriel

+0

No estoy seguro de que pueda tener más de una instancia del instalador de Windows ejecutándose a la vez. En este caso, habría dos. Uno ejecutándose desde dentro de otro. – w4g3n3r

0

¿Qué sucede si utiliza dos elementos "UpgradeVersion"?

<UpgradeVersion Maximum="CurrentVersion" Property="PREVIOUSVERSIONSINSTALLED" IncludeMaximum="no" /> 
<UpgradeVersion Minimum="CurrentVersion" Property="PREVIOUSVERSIONSINSTALLED" IncludeMinimum="no" /> 
1

¿Cómo solicitó las operaciones en su InstallExecuteSequence?

Si realiza la desinstalación después de la instalación (que le ofrece el mejor rendimiento de actualización), es posible que vea problemas si las versiones de archivos cambian a versiones inferiores; que podría ser el caso en sus degradaciones.

El instalador de Windows no sobrescribirá las versiones anteriores con las versiones más nuevas a menos que se solicite explícitamente.

Reordenar para desinstalar antes de la instalación debería ayudar si este es el caso.

+0

La desinstalación se ordena antes de la instalación. Tuve ese problema antes con las actualizaciones hasta que lo reprogramé. Ahora funciona con actualizaciones, pero todavía tiene problemas con la degradación de – Davy8

3

Esto es lo que funcionó para mí:

<Wix ...> 
    <Product ...> 
    <Property Id="REINSTALLMODE" Value="amus" /> 
    <MajorUpgrade AllowDowngrades="yes" /> 
+0

Esta debería ser la respuesta aceptada. Esto también funcionó para mí, aunque usé "dmus" en lugar de "amus" para sobrescribir solo los archivos si la versión es diferente. Lista completa de indicadores aquí: https://msdn.microsoft.com/en-us/library/aa371182%28v=vs.85%29.aspx?f=255&MSPPError=-2147217396 –

Cuestiones relacionadas