FoxPro/Visual FoxPro - Evitar que un EXE se ejecute mas de una vez

 
Vista:
sin imagen de perfil

Evitar que un EXE se ejecute mas de una vez

Publicado por victor perez (278 intervenciones) el 27/03/2011 03:07:09
Hola amigos,

He tenido problemas con algunos de los usuarios de mi sistema porque corren mas de una vez el EXE principal. (llamado Clinica.exe)

Necesito saber la via para evitar que se ejecute mas de una vez el mismo EXE en una PC.

Agradecido de antemanos,

Victor - Panama
Valora esta pregunta
Me gusta: Está pregunta es útil y esta claraNo me gusta: Está pregunta no esta clara o no es útil
0
Responder
sin imagen de perfil
Val: 4
Ha aumentado su posición en 2 puestos en FoxPro/Visual FoxPro (en relación al último mes)
Gráfica de FoxPro/Visual FoxPro

Evitar que un EXE se ejecute mas de una vez

Publicado por kong (682 intervenciones) el 27/03/2011 07:54:19
****prueba esto****



FUNCTION F_INSTANCIAR && PARA COMPROBAR SI YA SE ESTA CORRIENDO EL PROGRAMA
* pubnRutina=2
PUBLIC nHdlCorriendo
nHdlCorriendo=FCREATE("D:\corriendo.txt")
salir=0
IF nHdlCorriendo<0
SET SYSMENU OFF
_SCREEN.WindowStatE= 2
MESSAGEBOX("C U I D A D O !"+CHR(13)+CHR(13)+;
"USTED HA INTENTANDO EJECUTAR OTRA INSTANCIA DEL MISMO SISTEMA"+CHR(13)+;
"(Esta instancia se cerrara automaticamente)",(0+48),;
"DOBLE INICIO DEL SISTEMA",10000)
RELEASE WINDOWS
QUIT
salir=1
ENDIF
RETURN salir
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar

Evitar que un EXE se ejecute mas de una vez

Publicado por xx (378 intervenciones) el 27/03/2011 19:42:53
Esta es una de las formas:

*recuerda asignar la cadena _aname al caption de tu formulario principal
*FPRINCIPAL.CAPTION=_aname


*/////////////////////////////////////////////////////////////////////////////////
*// CHEQUEO DE EXCLUSIVIDAD DE INSTANCIA!!
*/////////////////////////////////////////////////////////////////////////////////
* basicamente lo que hace es buscar una ventana que tenga el mismo titulo y si lo encuentra
* significa que otra instancia ya se cargo previamente, hay una funcion API no recuerdo bien
* el nombre creo que se llamaba BingOnTop que te trae la ventana cuando esta no esta
* seleccionada
DECLARE INTEGER FindWindow IN WIN32API AS WAPIFWindow STRING @,STRING @
_aclass=NULL
_aname=[ADMINISTRACION p/PYMES, by ODRF++]
_XAppwhd=WAPIFWindow( @_aclass, @_aname )
CLEAR DLLS
IF _XAppwhd!=0
SET PROCEDURE TO
SET LIBRARY TO
MESSAGEBOX( [YA CARGO EL SISTEMA], 16, [ERROR] )
_KillSignal()
RETURN
ENDIF
RELEASE _aclass
*/////////////////////////////////////////////////////////////////////////////////

Pd: una cosa importante a tener en cuenta es que cuando abres un reporte este te cambia
el titulo _aname es decir si visualizas un reporte e intentas cargar el programa otra vez este te permitira, hay una solucion a este problema y es desviar el reporte a otra ventana no a la principal

Saludos
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar
sin imagen de perfil
Val: 309
Bronce
Ha mantenido su posición en FoxPro/Visual FoxPro (en relación al último mes)
Gráfica de FoxPro/Visual FoxPro

Evitar que un EXE se ejecute mas de una vez

Publicado por santiago (551 intervenciones) el 29/03/2011 16:48:19
Hola, el asunto es mas simple de lo que parece, graba una tabla (*.dbf) con un campo logico, en el disco C:\ de cada usuario, toda vez que el usuario ejecuta el Sistema, pones este campo en .T. y cuando sale del sistema lo pones en .F., si el sistema encuentra .T. ye no prosigue y sale ó pregunta si de todas maneras desea ejecutar el Sistema (por si hay un apagado inesperado del equipo, y el campo logico de queda en .T.).

Santiago
.
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar
sin imagen de perfil

Evitar que un EXE se ejecute mas de una vez

Publicado por Juan Manuel Cruz (512 intervenciones) el 28/03/2011 10:23:38
Ese es un tema preguntado mil veces, Víctor, sería buena idea que cada cierto tiempo te des una vuelta por PortalFox.

Una solución aquí:

http://www.portalfox.com/index.php?name=News&file=article&sid=228&mode=nested&order=0&thold=0

Suerte.
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar
sin imagen de perfil

Evitar que un EXE se ejecute mas de una vez

Publicado por victor perez (278 intervenciones) el 28/03/2011 03:28:54
Hola Kong,

Implementè tu rutina en mi PRG principal y no me funciona.

Lo que hice fue lo siguiente implemente la funciona f_instanciar y la llamo al inicio de mi PRG principal mediante f_instanciar()

Verifique y se crea el archivo corriendo.txt en el directorio principal del programa (no uso letras porque en cada computador las letras de los discos duros son distintos).

Luego corro nuevamente la aplicacion y se ejecuta a pesar d estar ejecutandose ya y que el archivo corriendo.txt està presente.

Por favor si me ayudas a ver donde esta el error...

Gracias

Victor,
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar
sin imagen de perfil

Evitar que un EXE se ejecute mas de una vez

Publicado por victor perez (278 intervenciones) el 29/03/2011 22:47:27
Hola,

Si yo visito Portalfox todas las semanas y me parece que daban una solucion al tema pero no lo entendí claramente, por eso la consulta.

victor,
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar
sin imagen de perfil

Evitar que un EXE se ejecute mas de una vez

Publicado por victor perez (278 intervenciones) el 29/03/2011 23:04:15
Hola,

La dirección de PortalFox dada por JuanManuel Cruz, me resultó utilisima. No tuve que configurar nada solo hacer un copy / paste y listo...

Gracias a Todos...
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar
Imágen de perfil de Mauricio
Val: 471
Plata
Ha mantenido su posición en FoxPro/Visual FoxPro (en relación al último mes)
Gráfica de FoxPro/Visual FoxPro

Evitar que un EXE se ejecute mas de una vez

Publicado por Mauricio (1541 intervenciones) el 30/03/2011 15:15:19
Victor, esta es otra manera de tratar de resolver tu problema:
http://www.portalfox.com/index.php?name=News&file=article&sid=2729
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar
sin imagen de perfil
Val: 96
Ha mantenido su posición en FoxPro/Visual FoxPro (en relación al último mes)
Gráfica de FoxPro/Visual FoxPro

Evitar que un EXE se ejecute mas de una vez

Publicado por roberto (55 intervenciones) el 08/04/2020 22:29:44
la tienes.... la que la dirección no existe....
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar
Imágen de perfil de Abel
Val: 642
Plata
Ha mantenido su posición en FoxPro/Visual FoxPro (en relación al último mes)
Gráfica de FoxPro/Visual FoxPro

Evitar que un EXE se ejecute mas de una vez

Publicado por Abel (286 intervenciones) el 09/04/2020 16:57:54
Usa ésto:Pasas por valor el nombre del EXE (nombre y extensión, por ej. Miprorgama.exe) y éste procedimiento se encarga de buscar en windows si esta en uso; si lo esta te devuelve .T. luego ya tu mismo verás como hacer que continue...

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
** 		* *******************************************************
** 		*
** 		*      Verifica la existencia del programa abierto.
** 		*
** 		* *******************************************************
Lparameters cNameSist
Local nSumator
 
nSumator   = 0
oService   = Getobject("winmgmts://./root/cimv2")
oProcesses = oService.ExecQuery("SELECT * FROM Win32_Process")
 
Create Cursor procesos (Descripcion c(60))
For Each oProcess In oProcesses
	Servicio = oProcess.Name
	If Lower(Servicio)=Lower(cNameSist)
		nSumator = nSumator+1
	Endif
Next
Return Iif(nSumator>1,.T.,.F.) 		&& Devuelve T.Abierto o F.Cerrado.
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
2
Comentar
sin imagen de perfil
Val: 96
Ha mantenido su posición en FoxPro/Visual FoxPro (en relación al último mes)
Gráfica de FoxPro/Visual FoxPro

Evitar que un EXE se ejecute mas de una vez

Publicado por roberto (55 intervenciones) el 09/04/2020 22:31:04
Gracias lo probare y comento el resultado.
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar
Imágen de perfil de Cristhian
Val: 47
Ha mantenido su posición en FoxPro/Visual FoxPro (en relación al último mes)
Gráfica de FoxPro/Visual FoxPro

Evitar que un EXE se ejecute mas de una vez

Publicado por Cristhian (5 intervenciones) el 20/06/2020 23:01:34
Buenas

Estoy teniendo el mismo inconveveniente..
Al abrir mi programa tengo un formulario de bienvenida el cual me lleva otro formulario de menu
Yo puse el código asi mismo en el INIT del formulario de bienvenida.. Al ejecutar me da error ""El valor, tipo o numero de argumentos no es valido para la funcion" en esta linea : "If LOWER(Servicio)= Lower(cNameSist)"

Que variable es la que deberia devolver .T. o .F. ?

Gracias
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar
sin imagen de perfil
Val: 1.011
Oro
Ha mantenido su posición en FoxPro/Visual FoxPro (en relación al último mes)
Gráfica de FoxPro/Visual FoxPro

Evitar que un EXE se ejecute mas de una vez

Publicado por Fidel José (657 intervenciones) el 21/06/2020 14:54:35
Antes que nada debes saber si tu parámetro "cNameSist" es un valor character.
Mete un Messagebox(cNameSist,0,"cNameSist.Value") debajo de LPARAMETERS para saber qué valor muestra,
o también Messagebox( "cNameSist Type = " + vartype(m.cNameSist) )
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
1
Comentar
Imágen de perfil de Abel
Val: 642
Plata
Ha mantenido su posición en FoxPro/Visual FoxPro (en relación al último mes)
Gráfica de FoxPro/Visual FoxPro

Evitar que un EXE se ejecute mas de una vez

Publicado por Abel (286 intervenciones) el 22/06/2020 13:32:27
Tienes que pasarle valor al parámetro NameSys y éste corresponde al nombre exacto de tu ejecutable, por eso no lo pondría en el init sino que crearia (por ejemplo) un PRG de nombre (siempre a modo ejemplo) Verifcar.prg y dentro el código, entonces para controlar que no este abierto miprograma.exe hago:

Verificar("Miprograma.exe")
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar
sin imagen de perfil

Evitar que un EXE se ejecute mas de una vez

Publicado por Ernesto (1 intervención) el 26/09/2023 04:27:22
Increíblemente después de tanto tiempo, aún son sumamente útiles los aportes que han hecho personas como tu.
Muchísimas gracias y saludos desde la región de Ñuble - Chile
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar