Portal    Foro    Buscar    FAQ    Registrarse    Conectarse


Publicar nuevo tema  Responder al tema 
Página 1 de 1
 
 
Permitir Una Sola Ejecución.
Autor Mensaje
Responder citando   Descargar mensaje  
Mensaje 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
 



 
Marcelo - Ver perfil del usuarioEnviar mensaje privado 
Volver arribaPágina inferior
Responder citando   Descargar mensaje  
Mensaje 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
 




===================
Blog personal
Web: SoloGambas seleccion de articulos dedicados a Gambas
Visita el Curso de Gambas3 ¡¡¡Gratuito!!!
 
última edición por jsbsan el Miercoles, 16 Noviembre 2011, 09:22; editado 4 veces 
jsbsan - Ver perfil del usuarioEnviar mensaje privadoVisitar sitio web del usuario 
Volver arribaPágina inferior
Responder citando   Descargar mensaje  
Mensaje 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
 




===================
No podemos regresar
 
shordi - Ver perfil del usuarioEnviar mensaje privado 
Volver arribaPágina inferior
Responder citando   Descargar mensaje  
Mensaje 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
 




===================
Jesús Guardón

Por favor, usemos el corrector ortográfico antes de pulsar el botón "Enviar".

"uo ǝs ʇɐu pıɟıɔıן ɐdɹǝupǝɹ ɐ dɹoƃɹɐɯɐɹ, soןo ɥɐʎ bnǝ dɹodouǝɹsǝןo"
 
jguardon - Ver perfil del usuarioEnviar mensaje privado 
Volver arribaPágina inferior
Responder citando   Descargar mensaje  
Mensaje 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

 



 
codificador - Ver perfil del usuarioEnviar mensaje privado 
Volver arribaPágina inferior
Responder citando   Descargar mensaje  
Mensaje 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
 



 
Marcelo - Ver perfil del usuarioEnviar mensaje privado 
Volver arribaPágina inferior
Responder citando   Descargar mensaje  
Mensaje 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
 




===================
Blog personal
Web: SoloGambas seleccion de articulos dedicados a Gambas
Visita el Curso de Gambas3 ¡¡¡Gratuito!!!
 
jsbsan - Ver perfil del usuarioEnviar mensaje privadoVisitar sitio web del usuario 
Volver arribaPágina inferior
Responder citando   Descargar mensaje  
Mensaje Re: Permitir Una Sola Ejecución. 
 
hola creo que se puede hacer sin usar el archivo  temporal
 



 
codificador - Ver perfil del usuarioEnviar mensaje privado 
Volver arribaPágina inferior
Responder citando   Descargar mensaje  
Mensaje 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
 



 
Marcelo - Ver perfil del usuarioEnviar mensaje privado 
Volver arribaPágina inferior
Mostrar mensajes anteriores:    
 
OcultarTemas parecidos
Tema Autor Foro Respuestas último mensaje
No hay nuevos mensajes Se Puede Eliminar Todos Los Objetos, Textb... luisrel General 7 Miercoles, 13 Junio 2012, 20:34 Ver último mensaje
jguardon
No hay nuevos mensajes Pila De Ejecución.... jsbsan General 13 Jueves, 10 Marzo 2016, 19:02 Ver último mensaje
jsbsan
No hay nuevos mensajes Permitir En Gmail Que Puedas Usar El Clien... Shell Mundo Linux 13 Martes, 07 Febrero 2017, 11:09 Ver último mensaje
Shell
No hay nuevos mensajes Declaración De Varias Variables De Un Mis... Shell General 3 Sabado, 23 Febrero 2019, 16:01 Ver último mensaje
tincho
 

Publicar nuevo tema  Responder al tema  Página 1 de 1
 

Usuarios navegando en este tema: 0 registrados, 0 ocultos y 1 invitado
Usuarios registrados conectados: Ninguno


 
Lista de permisos
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



  

 

cron