2012-07-04 25 views
5

Tengo un producto empaquetado como MSI. Cuando mis clientes instalan una nueva versión de mi producto sobre la superior de una versión existente, no funciona bien debido a una acción VBS personalizada, como se explica a continuación. Mi pregunta es: ¿cómo puedo cambiar mi MSI para que la instalación en la parte superior siempre haga una desinstalación completa de cualquier versión existente de antemano?¿Cómo desinstalar la versión anterior como parte de la instalación de msi?

El detalle es:

Tengo un producto con una gran variedad de versiones desplegadas en varias empresas diferentes. Aproximadamente una vez al año, cada uno de mis clientes recibiría una nueva versión de mi producto y se implementaría en las estaciones de trabajo de la empresa. Las personas responsables de la implementación preferirían poder instalar la nueva versión sobre la anterior, en lugar de tener que incluir un paso de desinstalación en su paquete de instalación.

La instalación de msi crea y escribe algunos archivos en la carpeta [CommonApplicationData] \ MyApp. Durante la ejecución, la aplicación crea más archivos en la carpeta [CommonApplicationData] \ MyApp. Durante la desinstalación, necesito eliminar todos estos archivos. Como no están instalados por el msi, no se desinstalan automáticamente, así que creé un script vbs que elimina esa carpeta y cualquier otra cosa en él. Pongo un comando para ejecutar esa VBS en ExecuteDeferred:

... 
RemoveFiles 
RemoveFolders 
CreateFolders 
MoveFiles 
InstallFiles 
PatchFiles 
If REMOVE="ALL" Then 
    REM line below is my custom script 
    call VBScript From Installation (MyApp_UninstallCleanup) 
End 
DuplicateFiles 
BindImage 
CreateShortcuts 
... 

Hasta ahora todo bien y funciona bien cuando se instala & desinstalación. Sin embargo, si instalo una nueva versión de mi producto sobre la superior de una versión existente, parece que las cosas suceden en este orden: a) instale una nueva versión, cree varios archivos en la carpeta [CommonApplicationData] \ MyApp y en [Archivos de programa] \ MyApp ..., sobrescribir archivos de la versión anterior b) ejecutar my vbs, eliminar la carpeta [CommonApplicationData] \ MyApp

Tengo los GUID para las versiones anteriores enumeradas en la tabla de actualización en mi nueva MSI, y aparte de este script personalizado, el proceso de actualización parece funcionar bien.

El producto en sí es bastante pequeño, por lo que estaría bien si el instalador siempre eliminara completamente las versiones anteriores antes de instalar la nueva versión. No hay configuraciones de usuario en la estación de trabajo que necesiten conservarse y los tamaños de archivo no son grandes. Por lo tanto, para simplificar, quiero desinstalar las versiones anteriores en lugar de actualizarlas solo con los bits que han cambiado.

¿Hay alguna forma de que pueda cambiar mi nueva MSI para que primero desinstale las versiones anteriores?

Cabe destacar que tengo muchas empresas que tienen instalada la versión existente de MSI que contiene los vbs personalizados. Entonces, la solución realmente necesita ser una que pueda hacer frente al msi instalado existente.

He utilizado Wise Installation Express 7.0 para crear el MSI.

gracias !!

(Cruz-registrado here)

Respuesta

5

Horario RemoveExistingProducts medidas antes InstallInitialize acción:

En este caso, el instalador elimina las viejas aplicaciones totalidad antes de instalar las nuevas aplicaciones. Esta es una colocación ineficiente para la acción porque todos los archivos reutilizados deben volver a copiarse.

1

respuesta from EdT en los foros de Symantec

Si ha utilizado la plantilla estándar Wise para sus instalaciones, entonces la acción RemoveExistingProducts se secuencia al final de la secuencia InstallExecute. Aunque técnicamente esta es la ubicación más "eficiente", a menos que haya ejecutado cuidadosamente UpgradeSync al crear su nuevo paquete para actualizar el anterior, el resultado final suele ser uno de archivos perdidos u otras aberraciones.

La solución consiste en volver a obligar a la acción RemoveExistingProducts para que se ejecute entre InstallValidate e InstallInitialize. Eso asegura que la aplicación anterior se elimine por completo antes de que se instale la nueva versión.

Busque "RemoveExistingProducts" en el archivo de ayuda MSI.CHM para obtener una explicación más detallada de las opciones para posicionar esta acción.

Cuestiones relacionadas