¿Qué hacer funcionalidad CloseApplication de WIX y cómo podría la aplicación del responden a una señal de este tipo

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

Pregunta

En la configuración WIX Tengo, al actualizar la aplicación que han establecido un requisito de cerrar las aplicaciones que pueden aferrarse a los archivos que necesita ser actualizado:

<util:CloseApplication
    Id="CloseMyApp" 
    Target="[MyAppExe]"
    CloseMessage="yes"
    Description="!(loc.MyAppStillRunning)"
    RebootPrompt="no"
    ElevatedCloseMessage="no"
/>

La aplicación por el contrario capturará el cierre de la ventana con un cuadro de "fácil de usar" de diálogo donde el usuario puede confirmar que él o ella quiere cerrar la aplicación.

Cuando el instalador se ejecuta CloseApplication se considera que la solicitud debe ser detenido, pero no se cierra mi solicitud. Una teoría es que el cuadro de diálogo se detiene la aplicación de cierre.

Así que la pregunta es: ¿Podría ser esto un posible problema? Si es así - ¿cómo puedo tener este cuadro de diálogo de confirmación y todavía se comportan correctamente cuando el instalador pide la aplicación de cerrar? ¿Debo escuchar los mensajes Win32 (como WM_QUIT / WM_CLOSE) o hay una API .NET que puedo utilizar para responder adecuadamente a estos eventos?

Actualización: Según lista de correo , CloseApplication enviará WM_CLOSE a la aplicación. Todavía tengo el problema con tener un comportamiento diferente si el usuario cierra la aplicación frente a un mensaje enviado por cerca WIX. No estoy seguro de cómo puedo identificar distintas fuentes de cómo se cierra la aplicación.

¿Fue útil?

Solución 2

Cuando el VM_CLOSE se envía a mi aplicación WPF, me sale como Jim menciona un acto de clausura. En ese evento de cierre que hago un control sobre la propiedad IsFocused en mi clase de la ventana. Cuando esto vuelve falsa, que salir de la aplicación sin la confirmación del usuario.

Otros consejos

Su aplicación debe obtener una WM_CLOSE que debe surgir en su aplicación .NET como un evento de "cierre" en el formulario principal. En la tramitación de eso, se puede utilizar la API de Win32 GetLastActivePopup para comprobar si hay activos cuadros de diálogo que tienen abren y cierran según sea apropiado.

Puede probar su aplicación al abrir el administrador de tareas y haciendo un "Terminar proceso" en su aplicación. Eso va a tratar de hacer una parada suave en primer lugar utilizando un método similar a lo que está haciendo, probablemente WiX.

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top