Club Delphi  
    Paypal   FTP   CCD     Buscar   Trucos   Trabajo   Foros

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

 
 
Herramientas Buscar en Tema Desplegado
  #11  
Antiguo 24-04-2015
Avatar de ecfisa
ecfisa ecfisa is offline
Moderador
 
Registrado: dic 2005
Ubicación: Tres Arroyos, Argentina
Posts: 10.508
Poder: 38
ecfisa is a splendid one to beholdecfisa is a splendid one to beholdecfisa is a splendid one to beholdecfisa is a splendid one to beholdecfisa is a splendid one to beholdecfisa is a splendid one to beholdecfisa is a splendid one to behold
Hola lgarcia.

Si entendí bien, deseas copiar otra version de la aplicación llamando desde esta misma a un actualizador que sobreescribirá una nueva versión de la misma.

El problema es, que mientras la aplicación se esté ejecutando, el s.o. no permitirá que sobreescribas su archivo ejecutable. Y por otro lado, no veo manera que la aplicación ejecute al actualizador cuando no se está ejecutando (ya esta cerrada).

Yo me refería a que hicieras algo parecido a este ejemplo,

Aplicación:
Código Delphi [-]
...
implementation

uses ShellApi;

function NecesitaActualizar(): Boolean;
begin
  // verificar si necesita actualizar
  Result:= True;
end;

procedure TForm1.btnActualizarClick(Sender: TObject);
begin
  if NecesitaActualizar() then
  begin
    // Cerrar y/o liberar lo necesario
    ShellExecute(Handle,
                 'open',
                 'Actualizador.exe',
                 nil,
                 nil,
                 SW_SHOWNORMAL);
  end;
end;
...

Actualizador:
Código Delphi [-]
...
implementation 

uses tlhelp32, ShellApi;

procedure CloseApplication(const ExeFileName: string);
var
  Entry: PROCESSENTRY32;
  hSnapShot, hProcess: THandle;
begin
  hSnapShot:= CreateToolhelp32Snapshot(TH32CS_SNAPPROCESS, 0);
  Entry.dwSize:= SizeOf(PROCESSENTRY32);
  if Process32First(hSnapShot, Entry) then
    while Process32Next(hSnapShot, Entry) do
      if Entry.szExeFile = ExeFileName then
      begin
        hProcess := OpenProcess(SYNCHRONIZE + PROCESS_TERMINATE,
                                False,
                                Entry.th32ProcessID);
        if hProcess <> 0 then
          TerminateProcess(hProcess, 0);
        CloseHandle(hProcess);
      end;
end;

procedure Actualizar;
begin
  // aquí iría el proceso de actualización
  Sleep(4000); 
  ShowMessage('Actualización terminada');
end;

procedure TForm1.FormActivate(Sender: TObject);
begin
  CloseApplication('Aplicacion.exe');
  Actualizar;
  ShellExecute(Handle,
               'open',
               'Aplicacion.exe',
               nil,
               nil,
               SW_SHOWNORMAL);
  Close;
end;
...

Saludos
__________________
Daniel Didriksen

Guía de estilo - Uso de las etiquetas - La otra guía de estilo ....

Última edición por ecfisa fecha: 24-04-2015 a las 19:54:15. Razón: agregar comentario
Responder Con Cita
 


Herramientas Buscar en Tema
Buscar en Tema:

Búsqueda Avanzada
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

Temas Similares
Tema Autor Foro Respuestas Último mensaje
Cerrar otra aplicación con ventana invisible Lord Delfos API de Windows 7 23-04-2008 18:33:14
Activar una ventana al cerrar otra David OOP 3 17-09-2007 21:15:54
¿Cómo cerrar otra aplicación desde la mía? Alcolea Varios 1 22-03-2007 03:02:35
Cómo cerrar otra aplicacion desde mi aplicacion en Delphi 7 Gaby123 API de Windows 5 04-01-2007 22:44:51
Cerrar una ventana desde otra Aura OOP 9 16-05-2005 18:20:49


La franja horaria es GMT +2. Ahora son las 06:05:33.


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