Cómo detectar un evento de proceso de finalización, el apagado de una computadora y el bloqueo de la computadora
Frecuentes
Visto 1,171 equipos
3
Estoy tratando de desarrollar una aplicación MFC de C++ que se ejecuta en segundo plano (en Windows) y tengo una pregunta para la que no puedo encontrar una respuesta completa.
¿Cómo puedo detectar cuándo el usuario intenta cerrarlo a través del Administrador de tareas eliminando el proceso, cuándo se cerraría apagando la computadora y cuándo falla la computadora en la que se ejecuta esta aplicación?
Sabiendo que tengo una base de datos externa (SQL Server 2008) con la que interactúa esta aplicación.
1 Respuestas
1
Puede manejar WM_QUIT como se sugirió anteriormente. También está WM_QUERYENDSESSION y su familia.
Para el servicio sin GUI, use RegisterServiceCtrlHandlerEx para recibir una notificación.
Por otro lado, para interceptar cuando su propia aplicación falla, se mete con los controladores de excepciones estructurados, aunque cuando sucede, es posible que no tenga datos confiables.
Por último, no hay nada que pueda hacer cuando la computadora falla, el comportamiento simplemente no está definido.
De todos modos, no puede asegurarse de que haya una sesión de base de datos saludable, hay infinitas razones por las que puede perder la sesión de base de datos incluso si está inactiva durante demasiado tiempo.
Debe diseñar el sistema para que tenga cierta tolerancia a fallas para casos extremos, como el uso de transacciones, mecanismo de reversión, registros rastreables cuando golpea el ventilador, etc.
Respondido 08 Feb 14, 13:02
No es la respuesta que estás buscando? Examinar otras preguntas etiquetadas c++ windows sql-server-2008 or haz tu propia pregunta.
Cuando la computadora está en proceso de apagarse y el usuario no lo fuerza, supongo que solo se envía el mensaje WM_QUIT, por lo que puede enviar algo a su base de datos en este caso, pero es mejor cerrar la aplicación poco después. En otros casos, supongo que no hay nada que puedas hacer excepto detectar que tu aplicación de repente deja de dar respuestas. - Predelnik
Con respecto a su primera pregunta, hay dos formas de cerrar un proceso a través del administrador de tareas. Uno es detectable por el proceso, el otro no lo es. Si se usó este último, su aplicación es un brindis. Eso es por diseño. Puede tener aplicaciones de vigilancia separadas, pero ¿quién vigila las vigilancias? Con respecto a su última pregunta, cuando la computadora falla, funciona mal de la peor manera. Estás preguntando cómo deshacer la tostada quemada. no puedes - David Hammen
@DavidHammen, tengo una idea pero no estoy seguro, creo que la aplicación hará ping a SQL Server cada 30 minutos y desarrollaré otro módulo que se ejecute en ese servidor que escucha cada ping, y si no hay ping después 30 minutos simplemente agregará una nueva línea en la base de datos, ¿qué piensas? - Lucie kulza