PDA

Ver la Versión Completa : ¿Qué se ejecuta en una plicación cuando ésta es terminada desde el Admin. de Tareas?


Aldo
07-02-2007, 18:10:43
Hola a Todos:

Ante todo, gracias por la atención brindada en la solución de esta pregunta.
Estoy trabajando en Delphi 5 y la cuestión es la siguiente:

¿Qué código se ejecuta en una aplicación Delphi cuando ésta es terminada desde el Administrador de Tareas de Windows? o en su defecto ¿Hay algo que me pueda brindar la oportunidad de capturar algún mensaje en la aplicación, que Windows le pasa cuando se invoca su terminación desde el Administrador de Tareas de Windows y si es así cuál es ese Mensaje WM_???? o SC_???? ?

El tema es que estoy trabajando con servidores DCOM y sus respectivos clientes y quiero tener sincronizados correctamente los clientes y el servidor. Por ejemplo si por algún motivo XXXX es necesario terminar la ejecución del Servidor DCOM desde el Administrador de Tareas de Windows, me gustaría poder capturar ese "Evento" y poder enviar un mensaje a todos los clientes conectados para desconectarlos y que a su vez se descarguen en sus ejecuciones.

Otro punto de vista es que se puede terminar de la misma manera el Cliente (Terminar Tarea en el Administrador de Tareas de Windows ) y como no termina por su cause normal, en el servidor DCOM quedará referencias a ese cliente, etc.

Muchas gracias por el tiempo prestado a leer este tema y a tratar de ayudarme en su solución.

Aldo

ixMike
07-02-2007, 20:19:00
No estoy seguro de qué mensaje envía el Administrador de tareas, pero seguro que es el mismo que envía Windows cuando cierrar sesión o apagas el ordenador: WM_ENDSESSION. Podrías hacer una comprobación.

Podría explicartelo mejor, pero no lo recuerdo muy bien y además es un tema ya tratado en los foros (te recomiendo que hagas una búsqueda).


Saludos :)

Aldo
08-02-2007, 09:39:15
Gracias Lunático por tu respuesta, pero me parece que no recibe ese mensaje de Windows. En una prueba que he hecho, he sobreescrito el procedimiento WndProc del formulario principal del cliente y he puesto un ShowMessage y por lo visto cuando se refiere al caso en concreto del que hablamos no pasa por ese procedimiento.

No obstante haré más pruebas porque también tengo sobreescrito el procedure que captura el mensaje de windows WM_QUERYENDSESSION para en este caso si se termina la aplicación porque el usuario lo está cerrando, sea consecuente con lo que quiero hacer ( el motivo de mi consulta, osea notificar según sea el caso al cliente o al servidor para que se mantenga coherente toda la información en el sistema ) y podré hacer lo mismo con el mensaje WM_ENDSESSION a ver si se comporta de la misma manera.

Gracias por tu tiempo.

seoane
08-02-2007, 12:16:16
Cuando se interrumpe la ejecución de un proceso desde el administración de tareas, este termina de forma brusca, no hay avisos.
Cerrar un proceso es una tarea que solo debe realizarse cuando un programa ha dejado de responder, o cuando queremos matar un proceso malicioso. En ambos casos no tiene sentido avisar de forma alguna, en el primero de los casos porque el programa no podría procesar ese aviso y en el segundo no nos interesa que el proceso pueda defenderse :D
La única solución es utilizar otra aplicación que se encargue de vigilar a la primera, por ejemplo, examinando la lista de procesos y detectando cuando esta ya no esta en la lista. O una solución un poco mas avanzada, seria que ambas aplicación es se comunicaran a intervalos regulares, de esta forma la segunda aplicación no solo detectaría cuando la primera aplicación es cerrada de forma abrupta sino que también cuando esta se ha quedado colgada.

Aldo
08-02-2007, 13:54:05
Gracias por tu tiempo. Lo que me comentas tiene sentido. Así que haré caso de la sugerencia que me haces para poder solucionar el problema que se me plantea. Saludos