Evitar que se inicie una aplicación varias veces


El iniciar la misma aplicación varias veces puede ser un problema si tenemos que interactuar con un recurso compartido, como el puerto serie, una base de datos, etc...
Para evitarlo, una de las formas más sencillas es crear un mutex cada vez que se inicie nuestro software.
El truco está en comprobar si la función CreateMutex devuelve un error, en caso afirmativo podemos tener la seguridad que la aplicación estaba abierta anteriormente y procederemos a detener su ejecución.

El código es el siguiente :

....
var
hnd:thandle;

IMPLEMENTATION
....

initialization
hnd := CreateMutex(nil, True, 'mutexprincipal');
if GetLastError = ERROR_ALREADY_EXISTS then Halt;

finalization
if hnd <> 0 then CloseHandle(hnd);
.....

end.

2 comentarios:

  1. Te falto lo mas importante. De donde sacas 'mutexprincipal', donde lo declaras? de donde sale 'mutexprincipal' y no 'mutexAplicacion' o cualquier otra cosa

    ResponderEliminar
  2. Donde pone "MutexPrincipal" puedes poner lo que quieras ya que es un string que representa el nombre del mutex

    ResponderEliminar