2009-04-02 12 views
6

Estoy usando Windows Installer XML 3.0 (WIX3) para instalar algún software.Pedirle al usuario que cierre la aplicación durante la desinstalación (en WiX)

Todo funciona bien, sin embargo, estoy teniendo un momento muy difícil de manejar los siguientes casos de uso: el software instalado es aún en marcha, cuando el usuario intenta desinstalación ella. El comportamiento predeterminado parece eliminar todos los archivos, pero deja que la aplicación se ejecute (lo cual es difícil de ver en mi caso, porque está ubicado en la bandeja de tareas).

I añade 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 instalación !

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

Respuesta

7

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" /> 

El material CloseApplication es sólo para aplicaciones de cierre durante la instalación, pero tiene fallos (al menos cuando yo probamos hace algunos meses, ¿quizás está arreglado ahora?)

Desafortunadamente, esto es nuevamente un ejemplo de la muy pobre documentación de WiX, ni siquiera los escenarios estándar de instalación/desinstalación como este están documentados.

+0

¡Gracias por la respuesta! Lo intenté de esa manera, pero no funcionó para mí. De acuerdo con MSDN, ambos diálogos también se muestran solo durante la instalación y no se evalúan durante la desinstalación. – beef2k

+0

Sí, CloseApps probablemente necesita un poco de refuerzo para manejar todos estos casos. Todavía no maneja todos los escenarios. –

+1

@RobMensching ¿Es la aplicación completa mejor ahora? – tofutim

1

Hubo una pregunta similar en la lista de correo de wix-users hace un par de días. La respuesta dada allí era:

Esta es la forma en que Windows funciona pre-Vista y Restart Manager. Hay tiene que ser una ventana de nivel superior disponible. Una aplicación en la bandeja no cuenta .

Hay algunos temas sobre el tema en el wix-users archive también.

0

Puede comprobar los registros de desinstalación (here is how to enable them), por lo que recuerdo Windows Installer colocará los archivos en un estado de eliminación pendiente y solicitará un reinicio al final.
También puede escribir una acción personalizada simple que matará su proceso.

0

para un ejemplo de cómo utilizar closeapplication, siga este enlace: wix github project, unit tests

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

0

respuesta de Shay es correcta. Las versiones recientes de Windows Installer simplemente se comportan de esta manera. Windows Installer se toma muchas molestias para asegurarse de que puede evitar un reinicio en el momento de la desinstalación reasignando Dlls en uso, etc. En general, una aplicación en ejecución puede continuar ejecutándose después de la desinstalación, y se realizará una limpieza cuando la aplicación se apaga, el resto después del próximo reinicio. El punto es que si Windows Installer puede mover los archivos binarios en uso a otra ubicación, mantenga las aplicaciones en ejecución y reemplace las que estaban en uso (pero el respaldo de la memoria vuelve a correlacionarse) y todo lo que se requiere es eliminar un poco de basura no esencial en el siguiente reinicio, ¿por qué forzar un reinicio?No es necesario mostrar un cuadro de diálogo de archivos en uso, para que esa situación no surja.

Esto puede causar problemas si la aplicación intenta acceder a un archivo que se ha desinstalado, pero asumo que el riesgo se ve como bajo. Si la aplicación necesita saber que está en marcha una desinstalación, entonces la integración con Restart Manager debería funcionar; Windows le dirá que hay una desinstalación en curso. De lo contrario, Shay está en lo cierto. Escriba una acción personalizada de desinstalación si es necesario para indicarle a la aplicación que cierre.

0

También me enfrenté a este problema. Cambiar el atributo Antes a "InstallValidate" funcionó para mí.

<Custom Before="InstallValidate" Action="WixCloseApplications"/> 
Cuestiones relacionadas