Club Delphi  
    FTP   CCD     Enlaces   Buscar   Trucos   Trabajo   Foros

Retroceder   Foros Club Delphi > Principal > Varios
Registrarse FAQ Miembros Calendario Guía de estilo Buscar Temas de Hoy Marcar Foros Como Leídos

Respuesta
 
Herramientas Desplegado
  #1  
Antiguo 10-08-2005
AFilth AFilth is offline
Miembro
 
Registrado: ago 2005
Posts: 119
AFilth Va por buen camino
Como reiniciar (cerrar y volver a abrir) mi propio programa??

Hola a todos, es la primera vez que escribo en el foro, aunque ya llevaba algun tiempo mirandolo ya que actualmente trabajo con Delphi.
Alguien sabe como podria, tras cerra mi aplicacion, volverla a abrir??
Lo que quiero acer es algo asi:

if MessageDlg('Los cambios serán aplicados tras reiniciar el programa ' + #13 +
'¿Desea hacerlo ahora?',
mtConfirmation, [mbYes, mbNo], 0) = mrYes then
"Reiniciar el programa" else
FPrincipal.Close();

Todo esto viene precedido de poder editar desde dentro del programa unos cambios en el .ini que solo deberian ser usados tras reiniciar el mismo.

Un saludo y gracias.
Responder Con Cita
  #2  
Antiguo 10-08-2005
dec dec is offline
Moderador
 
Registrado: dic 2004
Posts: 11.593
dec Va por buen camino
Hola,

Prueba con algo así:

Código Delphi [-]
 procedure AppRestart;
 begin
   WinExec(Pchar(ParamStr(0)), SW_NORMAL);
   TerminateProcess(GetCurrentProcess, 0);
 end;

Por cierto, el procedimiento se basa en uno que puede encontrarse en la librería Delphi Works.
__________________
David Esperalta
www.davidesperalta.com
Responder Con Cita
  #3  
Antiguo 10-08-2005
AFilth AFilth is offline
Miembro
 
Registrado: ago 2005
Posts: 119
AFilth Va por buen camino
Muchas gracias por la respuesta Dec, lo acabo de probar pero esa solucion no me vale del todo.

El problema es q intenta volver a abrir el programa antes de cerrarlo lo cual no es valido, ya q puede darme bastantes problemas.

La solucion q ando buscando es q se cierre lo primero el programa y despues mediante la ejecucion de algun fichero batch o algo asi q leve un delay de 1 o 2 segundos se vuelva a llamar al ejecutable del programa.

Tienes idea de como podria hacer eso?

Un saludo y gracias de nuevo.
Responder Con Cita
  #4  
Antiguo 10-08-2005
Avatar de Neftali
Neftali Neftali is offline
Aporreador de teclados
 
Registrado: jul 2004
Ubicación: Barcelona - España
Posts: 13.105
Neftali Va por buen camino
Necesitas una pequeña aplicación (lanzadera) que:
(1) Compruebe que tu programa ya no seestá ejecutando (FindWindows por ejemplo)
(2) Ejecute tu programa.

Antes de cerrar la tuya ejecutas la aplicación lanzadera y luego cierras la tuya.

Para mayor seguridad, yo lo que hago es añadirle un parámetro a la aplicación lanzadera y comprobarlo, de manera que sólo funciona correctamente si se le ha pasado ese parámetro (desde tu aplicación se lo pasas). De ésta foprma, si se llama por equivocación desde la línea de comandos (sin parámetro) no hace nada.
__________________
Neftalí -web - MyDropBox-
Guía de estilo, Guía alternativa, TAG's.
*Añade tu foto al Club*

(UPDATE) TrackInfo v.1.7b

Contactar con el Clubdelphi


P.D: Más tiempo dedicado a la pregunta=Mejores respuestas.
Responder Con Cita
  #5  
Antiguo 10-08-2005
Phacko Phacko is offline
Miembro
 
Registrado: jul 2004
Posts: 136
Phacko Va por buen camino
Quiza urgando en el regedit....

Que tal????

Si lo que quieres es que se reinicie tu aplicacion junto con Win checate esta dir:

http://www.q3.nu/trucomania/index.html

Última edición por Phacko fecha: 10-08-2005 a las 17:14:00. Razón: Modificarlo
Responder Con Cita
  #6  
Antiguo 10-08-2005
Avatar de Neftali
Neftali Neftali is offline
Aporreador de teclados
 
Registrado: jul 2004
Ubicación: Barcelona - España
Posts: 13.105
Neftali Va por buen camino
Cita:
Empezado por Phacko
...Si lo que quieres es que se reinicie tu aplicacion junto con Win
Creo que no va por ahí la cosa...
Textualmente:

Cita:
Empezado por AFilth
Alguien sabe como podria, tras cerrar mi aplicacion, volverla a abrir??
__________________
Neftalí -web - MyDropBox-
Guía de estilo, Guía alternativa, TAG's.
*Añade tu foto al Club*

(UPDATE) TrackInfo v.1.7b

Contactar con el Clubdelphi


P.D: Más tiempo dedicado a la pregunta=Mejores respuestas.
Responder Con Cita
  #7  
Antiguo 10-08-2005
dec dec is offline
Moderador
 
Registrado: dic 2004
Posts: 11.593
dec Va por buen camino
Hola,

Cita:
Empezado por AFilth
El problema es q intenta volver a abrir el programa antes de cerrarlo lo cual no es valido, ya q puede darme bastantes problemas.
Perdona, pero es totalmente válido: los problemas los tienes con la lógica de tu aplicación, probablemente. Quiero decir, que, no entiendo qué es lo que sucede realmente, pero, me pongo en situación, verás.

Tu aplicación guarda cierta información en archivos "Ini", pero no puede "aplicar" dicha configuración sino es cuando se inicia la aplicación: probablemente esto ya indica que algo podría hacerse de otro modo, pero, en todo caso, sigamos.

Antes de llamar a la rutina para reiniciar la aplicación tú guardas la información que sea menester en el archivo "Ini", entonces, ¿qué problema puede haber? No me lo imagino, puesto que cuando tu programa se inicie contará con la información necesaria en el archivo "Ini".

Por lo tanto algo está ocurriendo que tal vez no debería ocurrir o podría hacerse de tal forma que no diera esos problemas que dices que tienes: el problema, insisto, no está en el procedimiento que copié más arriba (porque de hecho se basa, como dije, en la librería Delphi Works y un procedimiento que se halla en esta).

De todos modos no te tomes lo que te digo a mal. Quizás estoy completamente equivocado y no pienso en qué hay que realizar exactamente y la problemática del tema: no lo conozco, solamente sé qué dices y a eso digo yo que no deberías tener problemas, insisto, si antes de llamar de "reiniciar" el programa tú ya escribiste en el archivo "Ini" la información precisa.

Tal vez se me escape algo (muy probablemente) pero no podía dejar de decir lo dicho Sin acritud, como suele decirse, solo por ver si puedo aportar algo y nada más. No hay otra intención.
__________________
David Esperalta
www.davidesperalta.com
Responder Con Cita
  #8  
Antiguo 11-08-2005
Avatar de OSKR
OSKR OSKR is offline
Miembro
 
Registrado: nov 2004
Ubicación: San Cristóbal/Táchira/Venezuela
Posts: 389
OSKR Va por buen camino
Hola Foro! tiempo sin verlos, creo que si podrias iniciar la aplicacion clon de la actual antes de cerrarla, pues puedes comunicarlas con paso de mensajes a través del RegisterWindowMessage, solo tendrias q parar el arranque de la secundaria desde código hasta q la primera le comunique q ya ha terminado (en otras palabras: la primera espera el momento en que la segunda tenga conciencia para terminar), por ejemplo esta aplicación evita ser ejecutada si ya existe otra instancia de ella:

UINT gmShutDown;

//---------------------------------------------------------------------------

__fastcall TForm1::TForm1(TComponent* Owner) : TForm(Owner)

{ gmShutDown=RegisterWindowMessage("6FBFC81A-D32A-4B8D-BB60-0390470F82CF");

}

//---------------------------------------------------------------------------

void __fastcall TForm1::ApplicationEvents1Message(tagMSG &Msg,bool &Handled)

{ if(Msg.message == gmShutDown) //Recepción del mensaje de primera aplicación

Application->Terminate();

}

//---------------------------------------------------------------------------

void __fastcall TForm1::BitBtn1Click(TObject *Sender)

{ PostMessage(HWND_BROADCAST, gmShutDown, 0, 0); //Enviar el mensaje a las otras
//aplicaciones
}

Ojala te sirva!!!
Responder Con Cita
  #9  
Antiguo 11-08-2005
AFilth AFilth is offline
Miembro
 
Registrado: ago 2005
Posts: 119
AFilth Va por buen camino
Buenas otra vez, en primer lugar gracias a todos. Veo q aqui hay autenticos expertos en Delphi

Dec el problema q te comentaba viene dado pq yo al intentar iniciar la aplicacion, tengo un control para q no se pueda hacer dos veces, al probarlo ya salta ese aviso y no se ejecuta el programa ya que al llamarlo el primero q se ejecuto aun no ha acabado.

Esto seria sencillo de controlar metiendo una variable q distinga ese caso de otro, pero este programa es bastante gordo (consume mucha memoria, tira de una BD de SQL Server muy muy grande, cxargha muchisimas cosas al arrancar...) y por ello no es factible arrancarlo por segunda vez si ya esta en ejecucion. En una maquina actual no daria problemas pero...en un PII o un PIII si no lo peta iria lentisimo.

No obstante gracias a todos por las respuestas, seguire investigando y probando lo q me habeis dicho y a ver si llego a alguna solucion.

Un saludo.
Responder Con Cita
Respuesta


Herramientas
Desplegado

Normas de Publicación
no Puedes crear nuevos temas
no Puedes responder a temas
no Puedes adjuntar archivos
no Puedes editar tus mensajes

El código vB está habilitado
Las caritas están habilitado
Código [IMG] está habilitado
Código HTML está deshabilitado
Saltar a Foro


La franja horaria es GMT +2. Ahora son las 11:40:39.


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