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
Permitir Una Sola Ejecución.
Objetivo: Re: Permitir Una Sola Ejecución.
última edición por jsbsan el Miercoles, 16 Noviembre 2011, 09:22; editado 4 veces
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
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
Suerte
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
http://gambasdoc.org/help/lang/lock
Saludos
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
por ejemplo
ps -aux | grep rutadelprograma
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
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
Objetivo: Re: Permitir Una Sola Ejecución.
Yo lo haria de la siguiente manera:
Creo un modulo "comprobar", con lo siguiente:
Y luego en el formulario principal (conde tengo un boton y un textbox, en mi caso), lo llamo asi:
Saludos
Citar:
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
'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:
Saludos
Objetivo: Re: Permitir Una Sola Ejecución.
hola creo que se puede hacer sin usar el archivo temporal
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:
Muchísimas gracias!!!!
Marcelo
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:
Muchísimas gracias!!!!
Marcelo
Página 1 de 1
No puede crear mensajesNo 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