Ver Mensaje Individual
  #1  
Antiguo 01-07-2005
uper uper is offline
Miembro
 
Registrado: abr 2004
Posts: 296
Reputación: 21
uper Va por buen camino
evitar doble ejecucion en el programa...

Saludos

tengo una pregunta para implementar el codigo de evitar doble ejecucion de la aplicacion por medio de semaforos, en mi caso en la forma principal ejecuto en el evento Oncreate codigo para las excepciones, y en el evento onshow lo uso para lanzar una forma de password.

el codigo de semaforos es este:
procedure TfrmPrinc.FormCreate(Sender: TObject);
var Sem : THandle;
begin
Sem := CreateSemaphore(nil,0,1,'PROGRAM_NAME');
if ((Sem <> 0) and (GetLastError = ERROR_ALREADY_EXISTS)) then
begin
CloseHandle( Sem );
ShowMessage('This program is already running.'+ 'Este programa ya se está ejecutando...');
Halt;
end;

end;

lo que hice es declarar un procedimiento llamado procedure Ejecucion(); en la seccion private del form principal, y luego lo llamo en oncreate

Ejecucion;
Application.OnException:= EcepcionException;
CargarDiccionario(ExtractFilePath(Application.ExeName) + NombreDiccio);
//para que capte las excepciones.

se ejecuta sin problemas pero si lo ejecuto otra vez me da el error programado de doble ejecucion pero despues me da el error que ha efectuado operacion no admitida, y el error runtime error 216 at 000587b9.

yo lo probe en una aplicacion sencilla en oncreate y funciona por que no le estoy agregando mas codigo de las excepciones, ahora que lo estoy implementando no resulta, hay algo para evitar esto.

mucha gracias.
Responder Con Cita