Directrices para aplicaciones
Las aplicaciones que se ejecutan en Windows Vista y Windows Server 2008 deben cumplir estas directrices para asegurarse de que el Administrador de reinicios puede apagar y reiniciar aplicaciones si es necesario para instalar actualizaciones. Los servicios pueden usar las directrices que se describen en Guidelines for Services.
El Administrador de reinicio consulta las aplicaciones de GUI para el apagado enviando una notificación de WM_QUERYENDSESSION que tiene el parámetro lParam establecido en ENDSESSION_CLOSEAPP (0x1). Las aplicaciones no deben apagarse cuando reciben un mensaje de WM_QUERYENDSESSION porque es posible que otra aplicación no esté lista para apagarse. Las aplicaciones de GUI deben escuchar el mensaje de WM_QUERYENDSESSION y devolver un valor de TRUE si la aplicación está preparada para apagarse y reiniciarse. Si ninguna aplicación devuelve un valor de FALSE, restart Manager envía un mensaje WM_ENDSESSION con el parámetro lParam establecido en ENDSESSION_CLOSEAPP (0x1) y el parámetro wparam establecido en TRUE. Las aplicaciones solo deben apagarse cuando reciben el mensaje WM_ENDSESSION. El Administrador de reinicio también envía un mensaje de WM_CLOSE para las aplicaciones de GUI que no se apagan al recibir WM_ENDSESSION. Si alguna aplicación de GUI responde a un mensaje de WM_QUERYENDSESSION devolviendo un valor de FALSE, se cancela el apagado. Sin embargo, si se fuerza el apagado, la aplicación se finaliza independientemente de lo que sea.
Cuando una aplicación de GUI recibe un mensaje de WM_ENDSESSION, la aplicación debe prepararse para apagarse dentro del período de tiempo de espera especificado. Como mínimo, las aplicaciones deben prepararse guardando los datos de usuario y la información de estado necesaria después de un reinicio. Se recomienda que las aplicaciones guarden periódicamente los datos y el estado del usuario.
El Administrador de reinicio envía una notificación CTRL_C_EVENT a las aplicaciones de consola que deben apagarse y reiniciarse. Cuando una aplicación de consola recibe una notificación CTRL_C_EVENT, la aplicación debe tomar medidas necesarias para prepararse para un apagado dentro del período de tiempo de espera especificado. Como mínimo, las aplicaciones de consola deben definir una función de HandlerRoutine para controlar la notificación de CTRL_C_EVENT y deben guardar los datos de usuario y la información de estado que se va a necesitar después de un reinicio. Se recomienda que las aplicaciones guarden periódicamente los datos y el estado del usuario.
Si alguna aplicación no se apaga en respuesta a los mensajes de apagado, los instaladores pueden usar la opción RmForceShutdown de la función RmShutdown para forzar el apagado de las aplicaciones. Cuando el instalador especifica un apagado forzado, restart Manager intenta apagar las aplicaciones de forma limpia mediante el envío de mensajes de apagado, pero los forzará si se produce un error. Las aplicaciones de GUI y las aplicaciones de consola se pueden forzar a apagar para habilitar la instalación de una actualización de seguridad crítica. Dado que esto puede provocar la pérdida de datos, las aplicaciones deben controlar los mensajes de apagado y apagarse de forma limpia cuando sea necesario.
Las aplicaciones deben registrarse para un reinicio mediante la funciónRegisterApplicationRestart. El Administrador de reinicio solo puede reiniciar las aplicaciones que se han registrado para el reinicio. Esta es la única manera de que el Administrador de reinicio pueda determinar el comando de línea de comandos que se va a usar al reiniciar la aplicación. Si la aplicación debe volver a abrirse con algún estado o datos guardados, esa información debe incluirse en el comando de línea de comandos registrado para la aplicación.
Nota
Si la aplicación reiniciada debe ejecutarse en el mismo directorio en el que se ejecutó antes de apagarse, la aplicación debe guardar la información del directorio y, a continuación, cambiar al directorio después de reiniciarse.
Nota
La función RmRestart no reinicia las aplicaciones que no se ejecutan como el usuario que ha iniciado sesión actualmente. Por ejemplo, la función RmRestart no reinicia las aplicaciones iniciadas con el comando Ejecutar como que no se ejecutan como el usuario que ha iniciado sesión actualmente. Estas aplicaciones deben reiniciarse manualmente.
Cuando Restart Manager determina que se requiere un reinicio del sistema para instalar una actualización, no se apagan las aplicaciones y los servicios. En su lugar, deja esto al instalador para decidir cuándo programar un reinicio del sistema e instalar la actualización. Los instaladores pueden reducir la interrupción de los usuarios causados por actualizaciones que requieren un reinicio del sistema mediante el uso de la función ExitWindowsEx con la marca EWX_RESTARTAPPS o la función InitiateShutdown con la marca SHUTDOWN_RESTARTAPPS. El uso de estas marcas garantiza que las aplicaciones registradas para el reinicio se reinicien después de un reinicio del sistema, lo que minimiza el impacto en el usuario.