Club Delphi  
    FTP   CCD     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

Grupo de Teaming del ClubDelphi

Respuesta
 
Herramientas Buscar en Tema Desplegado
  #1  
Antiguo 12-04-2011
satelier.martin satelier.martin is offline
Miembro
NULL
 
Registrado: mar 2011
Posts: 10
Poder: 0
satelier.martin Va por buen camino
Controlar la ejecución de un proceso

Hola a todos, les cuento que luego de encontrar la forma de embeber un .exe en mi aplicación mas surgieron otras dudas como:

Como hago para controlar que la aplicación que estoy ejecutando se ejecute solo una vez, leí varias formas dentro del foro las cuales obtenían los procesos del sistema para ver si se estaban ejecutando pero pode default el .exe que ejecuto desde mi aplicación esconde el proceso por lo cual no lo ve.

Por lo cual fui por el lado de ejecutar el .exe y esperar a que termine el proceso del .exe que lance así puedo verificar si mi proceso esta levantado y no ejecutar de nuevo.

Pero me di cuenta que si voy al administrador de procesos de windows y termino mi proceso el .exe que ejecute sigue ejecutandose.

Por lo cual tengo dos proguntas como hago para evitar que se ejecute dos veces un .exe el cual el proceso esta escondido ??

ó

Como hago para que cuando se cierre mi programa se cierre este proceso ??


Les dejo mi codigo (estoy ejecutando todo desde el dproj):
Código Delphi [-]
program L2exe;


uses Forms,ShellAPI,Windows,TLHelp32,SysUtils,Messages;

const
CM_RESTORE = WM_USER + $1000;

{$R *.res}
var
   RvHandle : hWnd;
   infoInicio : TStartupInfo;
   infoProceso : TProcessInformation;
   numProceso : Integer;
begin

  {Si existe otra instancia ya ejecutandose}

  RvHandle := FindWindow('L2exe.exe', NIL);
  if RvHandle > 0 then
  begin
    Application.Terminate;
  end;

  FillChar (infoInicio, SizeOf(infoInicio), 0);
  infoInicio.cb := SizeOf(infoInicio);
  Application.MessageBox('antes del call procces',
                                'Error', MB_ICONEXCLAMATION);
  if CreateProcess(PChar('L2.exe'), nil,
      nil, nil, false, 0, nil, nil,
      infoInicio, infoProceso) then
   numProceso := infoProceso.hProcess;

   WaitForSingleObject (numProceso, INFINITE);

   Application.Terminate;
end.

Última edición por ecfisa fecha: 13-04-2011 a las 08:28:41. Razón: Agregar ETIQUETAS [DELPHI] y [/DELPHI]
Responder Con Cita
  #2  
Antiguo 13-04-2011
Avatar de ecfisa
ecfisa ecfisa is offline
Moderador
 
Registrado: dic 2005
Ubicación: Tres Arroyos, Argentina
Posts: 10.508
Poder: 36
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 satelier.

Probá de esta forma:
Código Delphi [-]
program Project1;

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

begin {$R *.res}
  (* verificar otra instancia de la aplicación *)
  if (CreateMutex(nil, False, 'Identificador_Unico_Del_Proceso')=0) or
     (GetLastError = ERROR_ALREADY_EXISTS)  then
    Halt(1); 
  // continuar...
  Application.Initialize;
  Application.CreateForm(TForm1, Form1);
  Application.Run;
end.

Un saludo.
__________________
Daniel Didriksen

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

Última edición por ecfisa fecha: 13-04-2011 a las 09:15:21.
Responder Con Cita
  #3  
Antiguo 14-04-2011
satelier.martin satelier.martin is offline
Miembro
NULL
 
Registrado: mar 2011
Posts: 10
Poder: 0
satelier.martin Va por buen camino
Unhappy

ecfisa, no entendí bien que hace tu código igualmente lo probé y no funciono. Al parece no detecta el L2.exe que se esta escondiendo de la lista de procesos.

Y nisiquiera puedo terminar la ejecucion del mismo cuando terminan la mia abruptamente desde el administrador de atareas de windows.

Me esta comiendo la cabeza

Gracias por la respuesta.

Saludos.
Responder Con Cita
  #4  
Antiguo 14-04-2011
Avatar de ecfisa
ecfisa ecfisa is offline
Moderador
 
Registrado: dic 2005
Ubicación: Tres Arroyos, Argentina
Posts: 10.508
Poder: 36
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.

La función CreateMutex , si bién se usa para controlar secciones críticas en programacion concurrente, en este caso su función es relacionar un identificador único a cada instancia de la aplicación.

En el ejemplo, si encuentra que dicho identificador está presente, aborta la ejecución del programa. Si no, continua la ejecución.

Es por que no depende de la búsqueda de procesos, como las que has utilizado, que te la sugerí.

El ejemplo que te puse es totalmente funcional en situaciones normales, pero al ocultar el proceso puede que tampoco encuentre el identificador y por lo tanto no aborte la ejecución...

Un saludo.
__________________
Daniel Didriksen

Guía de estilo - Uso de las etiquetas - La otra guía de estilo ....
Responder Con Cita
Respuesta


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
Controlar componentes creados en tiempo de ejecución. damirua OOP 1 13-05-2010 15:03:58
Controlar el tiempo de ejecucion cyber_zero Varios 1 22-09-2008 02:01:05
Como Terminar La Ejecucion De Un Proceso kurono Varios 2 01-02-2008 18:10:44
Parar ejecucion de un proceso trohan Varios 3 01-02-2008 18:05:18
Controlar Windows Media PLayer en ejecucion wacala00 Varios 0 26-01-2007 18:08:53


La franja horaria es GMT +2. Ahora son las 22:27:37.


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