Permitir Una Sola Ejecución.


Objetivo: Permitir Una Sola Ejecución.
Hola, no sabía que título poner para hacerlo lo más explícito posible.. pero lo que necesitaría saber es de que manera puedo evitar que una aplicación gambas se ejecute por error más de una vez.
O sea, al iniciar mi programa me gustaría verificar si no está corriendo para así continuar con la ejecución y evitar que haya más de una copia corriendo a la vez.

Desde ya muchas gracias.

Marcelo

Perfil MP  
Objetivo: Re: Permitir Una Sola Ejecución.
Marcelo.

A mi lo primero que se me ocurre, es ver que procesos se estan ejecutando en el sistema, en el caso de que haya dos programas con el mismo nombre que el nuestro, informar del "error: ya se esta ejecutando"

Ver estos enlaces:
https://sites.google.com/site/fpopogramadorsistemas/sistemas-de-procesos-en-gnu-linux
http://www.ant.org.ar/cursos/curso_intro/x1845.html
Mas o menos el proceso de comprobacion seria el siguiente:

1) El usuario inicia una copia del programa "prueba.gambas",
Este lo 1º que hace es ver que procesos se estan ejecuntado. Encontrara un proceso llamado "prueba.gambas".
Sigue adelante porque solo hay una copia del programa en ejecucion

2) El usuario inicia una 2º copia del programa "prueba.gambas"
Hace la comprobacion y encuentra dos procesos "prueba.gambas", por lo tanto, hay que indicar que ya existe una copia en ejecucion y termina el programa.


Saludos

última edición por jsbsan el Miercoles, 16 Noviembre 2011, 09:22; editado 4 veces
Objetivo: Re: Permitir Una Sola Ejecución.
Otra manera, también muy clásica, es la de crear un pequeño fichero oculto en el home del usuario al abrir la aplicación y eliminarlo al cerrarla. Si en el momento de abrirla se detecta que el fichero existe es que ya hay una copia en marcha. El punto débil de ésta técnica es que si la aplicación aborta, el fichero queda presente y hay que borrarlo a mano...

Suerte

Perfil MP  
Objetivo: Re: Permitir Una Sola Ejecución.
Ver información relativa a Lock y Unlock, unas funciones que permiten gestionar este tipo de problemas, basada en la técnica que propone shordi.

http://gambasdoc.org/help/lang/lock

Saludos

Perfil MP  
Objetivo: Re: Permitir Una Sola Ejecución.
otra idea es preguntar por la ruta de los programas en ejecución y ver si ya existe un programa en la misma ruta
por ejemplo
ps -aux | grep rutadelprograma

Perfil MP  
Objetivo: Re: Permitir Una Sola Ejecución.
Uh, que loco, pensaba que podía llegar a haber alguna forma "gambas" de hacerlo
Por lo que imagino entonces me queda o la opción del archivo de Shordi o bien hacer un "ps x" y enviar su resultado a un archivo y en este verificar la existencia del nombre de mi programa. Si existe más de una vez quiere decir que se esta ejecutando por segunda vez. Veremos como puedo implementar esta búsqueda....

Muchísimas gracias

Marcelo

Perfil MP  
Objetivo: Re: Permitir Una Sola Ejecución.
Citar:
Veremos como puedo implementar esta búsqueda....


Yo lo haria de la siguiente manera:

Creo un modulo "comprobar", con lo siguiente:
' gambas module file

'nombre: nombre le la aplicacion que quiero ver si se esta ejecutando, por ejemplo: "prueba.gambas")
PUBLIC SUB ejecucion(nombre AS String) AS Boolean
DIM texto AS String
DIM buscar AS Integer
DIM buscar2 AS Integer

SHELL ("ps a >" & User.home & "/temporal.process") WAIT

texto = File.Load(User.home & "/temporal.process")

KILL User.home & "/temporal.process" ' para no dejar restos

buscar = InStr(texto, nombre)

IF buscar <> 0 THEN
'ha encontrado una coincidencia...osea una ejecucion
buscar2 = InStr(Mid$(texto, buscar + Len(nombre), Len(texto)), nombre)
IF buscar2 <> 0 THEN
'se ha encontrado una 2º ejecucion
RETURN TRUE
ELSE
'no hay 2º ejecucion
RETURN FALSE
ENDIF
ENDIF
'no encontro el programa (ninguna ejecucion)
RETURN FALSE
END

Y luego en el formulario principal (conde tengo un boton y un textbox, en mi caso), lo llamo asi:

PUBLIC SUB Button1_Click()
DIM encontrado AS Boolean

encontrado = comprobar.ejecucion(TextBox1.text)

IF encontrado THEN Message.Info("Se esta ejecutando por lo menos 2 veces")

END


Saludos

Objetivo: Re: Permitir Una Sola Ejecución.
hola creo que se puede hacer sin usar el archivo temporal

Perfil MP  
Objetivo: Re: Permitir Una Sola Ejecución.
Espectacular Jsbsan!!!! Funciona perfecto!! Es justo lo que necesitaba!!!
La modificacion que hay que hacerle al código es en el comando PS en lugar de "ps a" habría que poner "ps x", con eso se listan todos los procesos.

Y la llamada a la función la dejé de la siguiente manera:
' Verifica que el programa no se esté ejecutando
Dim encontrado As Boolean
encontrado = Funciones.Ejecutando("prueba.gambas")
If encontrado
Message.Error("El programa ya se está ejecutando...")
Quit
Endif


Muchísimas gracias!!!!

Marcelo

Perfil MP  

Página 1 de 1


  
No puede crear mensajes
No puede responder temas
No puede editar sus mensajes
No puede borrar sus mensajes
No puede votar en encuestas
No puede adjuntar archivos
Puede descargar archivos
No puede publicar eventos en el calendario

   

Está utilizando la versión (Lo-Fi). Para ver la versión completa del foro, haga clic aquí.

Powered by Icy Phoenix based on phpBB
Design by DiDiDaDo

Página generada en:: 0.3768s (PHP: -80% SQL: 180%)
Consultas SQL: 46 - Debug off - GZIP Activado