Club Delphi  
    FTP   CCD     Buscar   Trucos   Trabajo   Foros

Retroceder   Foros Club Delphi > Principal > Varios
Registrarse FAQ Miembros Calendario Guía de estilo Temas de Hoy

Grupo de Teaming del ClubDelphi

Respuesta
 
Herramientas Buscar en Tema Desplegado
  #1  
Antiguo 21-04-2009
pjmedina pjmedina is offline
Miembro
 
Registrado: abr 2006
Posts: 84
Poder: 19
pjmedina Va por buen camino
Como puedo autoreiniciar mi aplicacion

Buenas a todos,

existe alguna forma de autoreiciar una aplicacion desde delphi 7.

Quiero que se cierre la aplicacion y que se abra de nuevo.

Saludos y gracias
Responder Con Cita
  #2  
Antiguo 21-04-2009
Avatar de MAXIUM
MAXIUM MAXIUM is offline
Miembro
 
Registrado: may 2005
Posts: 1.488
Poder: 20
MAXIUM Va camino a la fama
Con otro programa auxiliar, justo antes de que cierre la aplicación, arrancas con winexec por ejemplo, otra auxiliar. Esta se encarga de corroborar que este cerrada la aplicación principal y luego la vuelve a abrir.

Este es un ejemplo, estudialo

Código Delphi [-]
program Bypass;

{$APPTYPE CONSOLE}

uses Windows;

Var
   Ventana: HWND;
Begin
  // verifica que la aplicación principal este cerrada
     Repeat
           Ventana:= FindWindow(nil, PChar('Mi aplicación principal'));
     Until Ventana = 0;

  // La vuelve a abrir.
     WinExec(PChar('aplicación.exe'), SW_HIDE);
End.
Responder Con Cita
  #3  
Antiguo 21-04-2009
pjmedina pjmedina is offline
Miembro
 
Registrado: abr 2006
Posts: 84
Poder: 19
pjmedina Va por buen camino
Lo probaré.

Gracias por contestar.
Responder Con Cita
  #4  
Antiguo 21-04-2009
Avatar de MAXIUM
MAXIUM MAXIUM is offline
Miembro
 
Registrado: may 2005
Posts: 1.488
Poder: 20
MAXIUM Va camino a la fama
Ojo, ese el código del archivo auxiliar.
Responder Con Cita
  #5  
Antiguo 21-04-2009
Avatar de dec
dec dec is offline
Moderador
 
Registrado: dic 2004
Ubicación: Alcobendas, Madrid, España
Posts: 13.107
Poder: 34
dec Tiene un aura espectaculardec Tiene un aura espectacular
Hola,

Prueba este truco a ver si te sirve también.
Responder Con Cita
  #6  
Antiguo 21-04-2009
Avatar de roman
roman roman is offline
Moderador
 
Registrado: may 2003
Ubicación: Ciudad de México
Posts: 20.269
Poder: 10
roman Es un diamante en brutoroman Es un diamante en brutoroman Es un diamante en bruto
David,

Pensé algo similar al truco que refieres, pero al ver la respuesta de Maxium, consideré que quizá es más adecuada, porque puede ser importante esperar a que la instancia anterior esté completamente cerrada. Por ejemplo, podríamos tenr un mecanismo para impedir la ejecución simultánea de dos instancias de la aplicación, y el hecho de que la primera ande viva todavía podría impedir el correcto reinicio.

// Saludos
Responder Con Cita
  #7  
Antiguo 21-04-2009
Khronos Khronos is offline
Miembro
 
Registrado: abr 2007
Posts: 298
Poder: 18
Khronos Va por buen camino
Mediante un Mutex, Semáforo o incluso un FileMapping puedes hacer lo que deseas fácilmente


Saludos.
Responder Con Cita
  #8  
Antiguo 21-04-2009
Avatar de roman
roman roman is offline
Moderador
 
Registrado: may 2003
Ubicación: Ciudad de México
Posts: 20.269
Poder: 10
roman Es un diamante en brutoroman Es un diamante en brutoroman Es un diamante en bruto
¿Lograr qué? El reinicio de la aplicación. ¿Cómo?

// Saludos
Responder Con Cita
  #9  
Antiguo 22-04-2009
pjmedina pjmedina is offline
Miembro
 
Registrado: abr 2006
Posts: 84
Poder: 19
pjmedina Va por buen camino
Cita:
Empezado por dec Ver Mensaje
Hola,

Prueba este truco a ver si te sirve también.
Buenas David,

he probado el truco pero no me funciona del todo. Me cierra la aplicación pero no me la abre de nuevo.

Saludos.
Responder Con Cita
  #10  
Antiguo 22-04-2009
pjmedina pjmedina is offline
Miembro
 
Registrado: abr 2006
Posts: 84
Poder: 19
pjmedina Va por buen camino
MAXIUM he utilizado tu código, le he hecho un par de arreglillos y va bien.

Paso el codigo por si alguien lo necesita.
Saludos y gracias por todo.

Código Delphi [-]
program Reconectar;
{$APPTYPE CONSOLE}
uses
  Windows,
  dateutils,
  SysUtils;
Var
  Ventana: HWND;
  Fini,Fact:TDateTime;
  napp,app:String;
  sg,tiempolimite:integer;
  Function CalculaTiempo(FechaIni: TDateTime; FechaFin: TDatetime):Integer;
  var
   sg:integer;
   ValorFecha: real;
  begin
    ValorFecha:=FechaFin-FechaIni;
    sg:=trunc(ValorFecha*24*60*60);
    CalculaTiempo:=sg;
  end;
Begin
  fini:=Now;
  napp:='Nombre de la aplicacion';
  app:='ejecutable.exe';
  tiempolimite:=30;//tiempo limite para la ejección del programa
   // verifica que la aplicación principal este cerrada
   Repeat
     Fact:=Now;
     sg:=CalculaTiempo(Fini,Fact);
     //sg contiene el numero de segundos transcurridos desde que se inicio la app.
     ventana:=FindWindow(nil, PChar(napp));
   Until((ventana<=0)or(sg>tiempolimite));
 
   //Si no se ha excedido el tiempo limite la vuelve a abrir.
   if sg<=tiempolimite then
      WinExec(PChar(app), SW_SHOWNORMAL);
End.

La llamada a este programa seria:
Código Delphi [-]
var
  ruta:string;
begin
  ruta:='Reconectar.exe';//Nombre de la aplicacion escrita anteriormente
  WinExec(PChar(ruta),SW_HIDE);
  close;//cerramos la aplicacion actual para volverla a abrir
end;

Última edición por pjmedina fecha: 22-04-2009 a las 13:32:44.
Responder Con Cita
  #11  
Antiguo 22-04-2009
Khronos Khronos is offline
Miembro
 
Registrado: abr 2007
Posts: 298
Poder: 18
Khronos Va por buen camino
Mucho más sencillo

Otra forma sería así:

Código Delphi [-]
program Project1;

uses
  Windows, Forms, Unit1 in 'Unit1.pas' {Form1};

{$R *.res}
var
  hMutex: THandle;
begin
  hMutex:= OpenMutex(MUTEX_ALL_ACCESS, false, pchar('APP'));
  If hMutex = 0 then
    begin
      CreateMutex(nil, true, pchar('APP'));
      WinExec(pchar(paramstr(0)), SW_SHOWNORMAL);
      ExitProcess(0);
    end;
  Application.Initialize;
  Application.CreateForm(TForm1, Form1);
  Application.Run;
end.

EDITO: Luego en el evento OnClose del Form principal pondríamos algo así: CloseHandle(hMutex);

Saludos.
Responder Con Cita
  #12  
Antiguo 22-04-2009
Avatar de rgstuamigo
rgstuamigo rgstuamigo is offline
Miembro
 
Registrado: jul 2008
Ubicación: Santa Cruz de la Sierra-Bolivia
Posts: 1.646
Poder: 17
rgstuamigo Va por buen camino
Lightbulb

Cita:
Empezado por pjmedina Ver Mensaje
Buenas David,

he probado el truco pero no me funciona del todo. Me cierra la aplicación pero no me la abre de nuevo.

Saludos.
A mi me funciona de maravilla;... no se por que a vos no?
Claro que le agregue una linea de codigo mas, lo que pasa es cuando llamas nuevamente a la aplicacion para que se inicie en realidad la anterior no se cerro todavia y por tal motivo en la pantalla se visualiza aun en un cierto tiempo,por eso le agregue una linea de codigo mas al truco de dec y quedó asi:
Código Delphi [-]
Procedure ReiniciarAplicacion();
begin
 Application.MainForm.Hide;//escondo el formulario principal
 WinExec(PChar(ParamStr(0)), SW_NORMAL);
 TerminateProcess(GetCurrentProcess, 0);
end;
Funciona perfectamente y es poco codigo ¿no creen?.
Saludos....
__________________
"Pedid, y se os dará; buscad, y hallaréis; llamad, y se os abrirá." Mt.7:7
Responder Con Cita
Respuesta



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

Temas Similares
Tema Autor Foro Respuestas Último mensaje
Cómo puedo hacer multiventana mi aplicación dalsim Varios 12 27-08-2008 04:31:51
Como puedo hacer que en un StatusBar me ponga los Hint de la aplicacion Nbull Varios 8 23-03-2008 16:25:40
¿Como puedo crear un Thread independiente a mi aplicación? aeff API de Windows 3 08-10-2007 02:41:17
Como puedo definir un semaforo en mi aplicación Delphi?? burasu SQL 1 21-06-2004 19:22:08
como puedo usar una unit externa dentro de mi aplicacion redlyon13 Varios 2 30-11-2003 18:09:13


La franja horaria es GMT +2. Ahora son las 00:21:17.


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
Copyright 1996-2007 Club Delphi