Foros Club Delphi

Foros Club Delphi (https://www.clubdelphi.com/foros/index.php)
-   API de Windows (https://www.clubdelphi.com/foros/forumdisplay.php?f=7)
-   -   Cerrar programa y ejecutar otro (https://www.clubdelphi.com/foros/showthread.php?t=94050)

juanelo 05-07-2019 21:59:51

Cerrar programa y ejecutar otro
 
Que tal,
Aqui dandome de topes, les comento:
Ya tengo programada toda la funcionalidad de actualizacion de mi sistema, tiene una opcion de buscar actualizaciones, en casa de encontrarlas, se descargan y se intenta aplicar dicha actualizacion.
Para esto decidi que mi programa "principal" sea un "launcher" que chequea si hay alguna actualizacion descargada y en caso de ser asi, la aplica (copia los archivos dll's y exe's al directorio de instalacion)


1.- Se ejecuta la aplicacion launcher.exe, esta a su vez ejecuta admin.exe (y se cierra laucher)

2.- Se pregunta por alguna actualizacion en la Aplicacion Admin.exe, si hay se descarga y se manda a cerrar Admin.exe
3.- Se manda a ejecutar launcher.exe, esta checa si hay alguna actualizacion pendiente y la trata de aplicar.
4.- Se manda a llamar a admin.exe


El problema lo tengo en el paso 3, ya que al parecer los dll que carga admin.exe no se descargan antes de que el programa launcher.exe intente sustiuirlos (por los nuevos).


¿Alguien sabe como cerrar una aplicacion y forzar que todos los dll, bpl, etc se descarguen junto con la terminacio del programa que los cargó ?


Les gradezco el tiempo que puedan tomarse para darme una mano.
Saludos.

Al González 06-07-2019 18:30:07

Hola Juanelo, un gusto leerte.

Podrías intentar con hacer una pausa antes de iniciar el copiado de los archivos. También sería conveniente revisar si existen otras aplicaciones que necesiten de esas mismas DLLs.

Y un truco que podría funcionar es renombrar la DLL que ya tienes en disco antes de reemplazarla por la nueva. He visto que esto es permitido con Windows, incluso cuando la biblioteca se encuentra cargada en memoria.

Saludos. :)

Neftali [Germán.Estévez] 08-07-2019 13:00:37

Cita:

Empezado por juanelo (Mensaje 532649)
¿Alguien sabe como cerrar una aplicacion y forzar que todos los dll, bpl, etc se descarguen junto con la terminacio del programa que los cargó ?


¿Has probado enviando mensaje de cierre?
Código Delphi [-]
 SendMessage(MyHandle, WM_CLOSE, 0, 0);


Eso si, tal y como comenta [Al], en cualquier caso, debes darle tiempo a que se cierre y se descargue de memoria.
Siempre puedes hacer un bucle que revise las aplicaciones abiertas y espere hasta que esta no lo esté.

juanelo 10-07-2019 19:46:27

Al, Neftali:
Muchas gracias por su tiempo y respuestas, me disculpo por reponder hasta hoy, pero he andado complicado ultimamente.
Les comento, decidi usar el viejo truco de la "progress bar osciosa", la uso para dejar pasar cierto tiempo y asegurar que todos los modulos se hayan descargado.
En verdad les agradezco mucho.
Saludos.


La franja horaria es GMT +2. Ahora son las 06:10:30.

Powered by vBulletin® Version 3.6.8
Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
Traducción al castellano por el equipo de moderadores del Club Delphi