FoxPro/Visual FoxPro - Ejecutable queda Abierto

   
Vista:
Imágen de perfil de Jose Maria

Ejecutable queda Abierto

Publicado por Jose Maria jmv_lkd@yahoo.com.ar (17 intervenciones) el 07/03/2014 16:43:37
Tengo el siguiente problema en uno de mis sistemas y no logro encontrar el motivo

1.- El sistema tiene acceso con usuario y clave y queda registrado en un archivo con fecha y hora de inicio y fin y cuando necesito reemplazar a traves de internet el ejecutable por haber realizado actualizaciones, no me permite hacerlo porque me dice que hay usuarios activos, los llamo para verificar y me dicen que no hay nadie en el sistema.

Yo estoy seguro de que ingresando a ADMINISTRACION DE TAREAS de Window , por algun motivo en alguna de las pc quedo el ejecutable en Proceso

Si alguien tuvo el problema, necesitaria saber como se puede hacer para poder cerrarlo ( en usuarios que tengo permiso de acceso y se que no hay nadie trabajando , reinicio el servidor y lo soluciono ) pero necesito poder hacerlo sin que se reinicie el servidor

Desde ya muchas gracias
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

Ejecutable queda Abierto

Publicado por Fidel José (558 intervenciones) el 07/03/2014 22:59:05
Tendríamos que tener idea de qué hace la rutina de cierre del sistema.

Básicamente la rutina de cierre sería algo como lo que sigue abajo.
Si estás trabajando con un formulario principal (ShowWindow=2), puedes llamar a esta rutina desde el Unload del form principal.
Si estás trabajando con _SCreen.Visible, lo mejor es poner un comando Cerrar en el menú y _SCreen.Closable=.F.
El comando Cerrar del menú contendrá solamente Rutishut().

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
*<Main.prg>
* - comandos de inicio y set
ON SHUTDOWN DO RUTISHUT
READ EVENTS
ENDPROC
 
*********************
PROCEDURE RutiShut()
********************
LOCAL lnFormOpen
lnformOpen=CerrarForms()
IF lnFormOpen>0
	RETURN
ENDIF
 
CLOSE DATABASES ALL
ON SHUTDOWN
SET CLASSLIB TO
SET PRINTER TO
CLOSE ALL
* DELETE FILE &DTEMP\*.*      && dtemp es una variable que contiene la ruta de tablas temporales
CLEAR EVENTS
SET PROCEDURE TO
QUIT
ENDPROC
 
PROCEDURE CerrarForms()
**************************
* Cerrar cualquier formulario que quede abierto
************************************************
LOCAL lni,lnLoop
LnLoop=0
lni=_Screen.FormCount
DO WHILE _screen.FormCount > 0
	CloseForm(_Screen.FormCount)
	lnLoop=m.lnLoop+1
	IF m.lnLoop > m.lni
		EXIT
	ENDIF
ENDDO
 
RETURN _SCREEN.FormCount
ENDPROC
 
PROCEDURE closeForm(xnIndex)
*****************************
_sCreen.Forms(xnIndex).Hide()
_sCreen.Forms(xnIndex).release()
RETURN
ENDPROC

Si esto no permite cerrar el sistema (que desaparezca del Administrador de Tareas), es porque no se desenlazan correctamente clases o referencias de objetos en uno o más formularios que las utilicen. Hay que empezar a buscar en el uso de subclases (sobre todo, múltiple subclaseado) y formularios de instancia múltiple.
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 Jose Maria Vilar

Ejecutable queda Abierto

Publicado por Jose Maria Vilar (17 intervenciones) el 08/03/2014 18:02:05
Aca les muestro parte del programa de inicio y la opcion de salida del sistema en el menu

**** La parte del programa de Inicio del sistema entre todo lo que hace al final tiene

1
2
3
4
5
6
7
8
DO MENU.MPR                      && Es el Menu del sistema
READ EVENTS
 
CLEAR WINDOW
CLEAR ALL
CLOSE ALL
SET SYSMENU TO DEFAULT
CLEAR


********* En la opcion de Salir del menu esta

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
vnom=serialno()              && Tiene los datos de la PC en la que se esta trabajando ( GLUSUARIO , GLSUCURSAL etc )
restore from &vnom additive
 
if !used("accesos")                   && Base de datos con el control de los que ingresaron al sistema
   use accesos in 0
endif
sele accesos
LOCATE FOR ALLTRIM(usuario) == ALLTRIM(GLUSUARIO) AND fecha == DATE() AND EMPTY(SALE) AND SUCURSAL == GLSUCURSAL AND ALLTRIM(sistema) == "ITA"
 
if FOUND()
   replace sale with time()           && le pone la hora de salida del sistema para el usuario
endif
 
 
set sysmenu to defa
clear events
clear
CLEAR ALL
cancel
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

Ejecutable queda Abierto

Publicado por Fidel José (558 intervenciones) el 10/03/2014 16:10:29
* Deberías controlar que se cierren todos los formularios acá. Puede revelarte algún problema de interfase.
* Si trabajas con tablas nativas, CLOSE DATABASES ALL
* set sysmenu to defa
clear events
clear
CLEAR ALL

* cancel && esto no va
IF _VFP.StartMode=0 && modo interactivo
set sysmenu to defa
else
QUIT * Para la versión ejecutable termina con el programa.
endif

Si tienes la cruz de cierre _screen.Closable=.t., tu versión de salida del programa no se ejecutará nunca si el usuario sale con la cruz de cierre. Siempre es recomendable tener una rutina de cierre y activarla con ON SHUTDOWN antes del READ EVENTS.
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 Jose Maria Vilar

Ejecutable queda Abierto

Publicado por Jose Maria Vilar jmv_lkd@yahoo.com.ar (17 intervenciones) el 11/03/2014 11:59:16
Muchas Gracias, lo voy a probar
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