Preguntar al usuario para cerrar la aplicación durante la desinstalación (en WiX)

StackOverflow https://stackoverflow.com/questions/710647

  •  22-08-2019
  •  | 
  •  

Pregunta

Estoy utilizando Windows Installer XML 3.0 (WIX3) para instalar algún software.

Todo funciona bien, sin embargo, estoy teniendo un momento muy difícil de manejar los siguientes casos de uso: el software instalado es sigue funcionando , cuando el usuario intenta desinstalación él. El comportamiento por defecto parece eliminar todos los archivos, pero permite la aplicación en ejecución (que es difícil de ver en mi caso, porque está sentado en la barra de tareas).

He añadido el siguiente código en mi archivo installer.wxs:

<InstallExecuteSequence>
  <Custom Action="WixCloseApplications" Before="RemoveFiles" />
</InstallExecuteSequence>

<util:CloseApplication Id="CloseFoobar"
                       CloseMessage="no"
                       Description="FooBar is still running!"
                       ElevatedCloseMessage="no"
                       RebootPrompt="no"
                       Target="foobar.exe" />

Pero esto no funciona - lo que es peor, se muestra un cuadro de diálogo que pide un reinicio durante la instalar

!

¿Cuál sería la forma correcta de hacerlo?

¿Fue útil?

Solución

Por lo que yo recuerdo que debería ser suficiente para añadir las siguientes referencias a la interfaz de usuario:

<DialogRef Id="FilesInUse" />
<DialogRef Id="MsiRMFilesInUse" />

Las cosas CloseApplication es sólo para cerrar las aplicaciones durante la instalación, pero está libre de errores (al menos cuando lo probé hace unos meses, tal vez es resuelto ahora?)

Por desgracia, esto es una vez más un ejemplo para los más pobres de la documentación de WiX, ni siquiera estándar de instalar / desinstalar escenarios como éste están documentados.

Otros consejos

Hubo una pregunta similar se le preguntó sobre los wix lista de distribución hace un par de días. La respuesta dada hubo:

  

Esta es la forma en que Windows funciona   pre-Vista y Administrador de reinicio. Ahí   tiene que ser una ventana de nivel superior   disponible. Una aplicación en la bandeja no lo hace   contar.

Hay algunas discusiones sobre el tema en el wix usuarios archivo también.

Para un ejemplo de cómo utilizar closeapplication, siga este enlace: Wix github proyecto , pruebas de unidad

Para mostrar un diálogo de consulta que puede utilizar: <util:CloseApplication Id="CloseIE" Target="iexplore.exe" PromptToContinue="yes" Description="Test" />

Se puede comprobar los registros de desinstalación ( aquí es cómo permitirles ), en la medida como recuerdo de Windows Installer pondrá sus archivos en un estado pendiente de eliminación y pedir un reinicio al final.
También puede escribir una sencilla acción personalizada que matará a su proceso.

La respuesta de Shay es correcta. Las versiones recientes de Windows Installer simplemente se comportan de esta manera. Windows Installer va a un montón de problemas para asegurarse de que se puede evitar un reinicio en el momento de desinstalación por la re-asignación en uso Dlls etc. En general, una aplicación en ejecución puede continuar ejecutándose después de la desinstalación, y algo de limpieza se producirá cuando la aplicación se apaga, el resto después del siguiente reinicio. El punto es que si Windows Installer puede mover los binarios en uso a otro lugar, mantener las aplicaciones en ejecución, y reemplazar a los que estaban en uso (pero respaldo de la memoria remapped) y todo lo que se necesita es la eliminación de un poco de chatarra no esenciales en el siguiente reinicio entonces ¿por qué forzar un rearranque? No hay necesidad de mostrar un diálogo de archivos en uso, por lo que no se plantea esa situación.

Esto puede causar problemas si la aplicación intenta acceder a un archivo que ha sido desinstalado, pero supongo que el riesgo se considera bajo. Si la aplicación necesita saber que una desinstalación está pasando a continuación intergrating con Administrador de reinicio debe trabajar - Windows le dirá que hay una desinstalación pasando. De lo contrario, una vez más, Shay es correcta. Escribe una acción personalizada de desinstalación si es necesario para decirle a la aplicación que cerrar.

También enfrentado a este problema. Antes de cambiar el atributo de "InstallValidate" trabajó para mí.

<Custom Before="InstallValidate" Action="WixCloseApplications"/>
Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top