PDA

Ver la Versión Completa : Verificar el cierre de una aplicacion remota


JAI_ME
06-05-2007, 18:24:35
Buenos dias foreros, mi inquietud es la siguiente ojala sepa ser explicito para que me puedan colaborar al maximo...

Estoy haciendo una aplicacion para un cafe internet donde tengo ya montado el programa servidor y varios clientes en sus respectivas maquinas, el problema que tengo es que cuando mato el proceso en un cliente el servidor debe saber que cliente cerro el programa... es decir verificar si el programa fue cerrado o fue reiniciado o apagado el pc.

He estado buscando en los foros pero no encuentro exactamente lo que estoy buscando, me proponen hacerlo con Aplicaciones espias, pero no me parece indicado porque tendria que montar otra aplicacion e igual la pueden cerrar y quedaria en las mismas... me gustaria mas verificar desde el propio servidor cuales son las maquinas que han sido cerradas, pero la verdad no se si se pueda hacer.... les agradesco mucho su ayuda pues si tienen otra sugerencia se los agradesco... Haaaa uso para esto los componentes Indy IdUDPServer, IdUDPClient

cHackAll
07-05-2007, 00:06:35
Hay algunas cosas que no me quedan del todo claro, si tu configuraste la red sabes claramente el IP (estático o dinámico) que la ISP te dió, y que por ende cada equipo tiene, utilizando DHCP tendrías complicaciones pero lo dudo en grande.

Habiendo configurado tu la red (e instalado los PCs), tienes la posibilidad de ver los procesos de otras maquinas con tasklist.exe, que es propio del Güindos. Solo necesitas haber definido una contraseña de administrador al momento de instalar (y eso despues tambien). Para hacer la prueba en la linea de comandos escribe:

net use \\pcX\ipc$ (file://\\pcX\ipc$) /name:Administrador ClaveAdministrador
tasklist /S pcX /FI "IMAGENAME eq TuPrograma.exe"

Cómo lo puedes procesar en Delphi? pues bueno hay trucos y un hilo que habla de la lectura de consolas... puedes hacerlo con pipes, o como yo sugerí.

Así y todo no veo necesario ver si el proceso está corriendo en la maquina "cliente", si tu aplicacion cliente no responde (envias un byte, y esperas una respuesta), pues sabes que esta colgado o sincronizando o finalizado (éste último evento debería ser contamplado en OnDisconnect)... depende mucho de cómo estés realizando tu programita.

Te aconsejo usar la API: IcmpSendEcho, para hacer ping a la máquina destino... si no responde es porque la reiniciaron o apagaron. Y si te gusta pues usa el ping.exe del Güindos.

Suerte!