Parar un programa en red.

Parar un programa en red.

Postby Andrés González » Sun May 22, 2011 7:15 am

Hola compañeros del foro, estoy desarrollando un programa que me controla los accesos de todos los programas por los usuarios, con lo cual sé cuando un programa está abierto. Muchas veces los usuarios lo dejan funcionando durante el fin de semana y como mi programación se basa en ficheros externos, cuando algunas veces intento modificar alguno de estos ficheros externos están cogidos por el programa principal y no me deja modificarlos hasta que el usuario deje de utilizar dicho programa. Me preguntaba si existe alguna manera de parar la execución del programa desde la red. Estoy pensando en poner algun timer que me mire un fichero externo y dependiendo de los que contenga ese fichero lo pare, evite que la gente se conecte o que controle la inactividad del programa.

Sabéis si existe alguna otra manera de parar el programa en red? Necesito solo parar ese programa no el resto de aplicaciones, con lo que no me valen cosas como el VNC el TeamViewer o similares. Tampoco matar los procesos desde el servidor, necesito que el programa se cierre correctamente y no me deje colgado ningún proceso. Alguna idea de como hacerlo, alguien ha hecho algo similar?

Un saludo.
Saludos

Andrés González desde Mallorca
User avatar
Andrés González
 
Posts: 628
Joined: Thu Jan 19, 2006 10:45 am
Location: Mallorca

Re: Parar un programa en red.

Postby cuatecatl82 » Sun May 22, 2011 1:57 pm

Saludos y buen Domingo:

A mi me pasaba lo mismo, necesitaba indexar tablas en mi sistema cada que necesitaba hacer un proceso de envio de archivos para otras tiendas, lo unico que pude hacer de forma rapida y funcional era intalar VNC Viewer en la Pc donde yo estaba y VNC server en todas las maquinas terminales que son gratuitos, cuando alguien se quedaba colgado sin hacer nada yo entraba y mediante su numero IP o nombre de terminal de red entraba y cerraba su sesión, era un poco engorroso y hasta en cierto punto les molestaba que hiciera eso, pero no me quedaba de otra.

La opcion de usar el timer es buena, pero tendrias que controlar cuando tu Programa esta en espera sin hacer nada o "IDLE" con SetIdleAction(), a mi no me funciono o no supe implementarlo, por eso uso lo que te comente.

Si alguien más pudiera asesorarte y que funcione seria estupendo...
Soluciones y Diseño de Software
Damos Soluciones...

I.S.C. Victor Daniel Cuatecatl Leon
Director y Diseñador de Proyectos

http://www.soldisoft.unlugar.com
http://www.sisa.unlugar.com
danyleon82@hotmail.com
www.facebook.com/victordaniel.cuatecatlleon
User avatar
cuatecatl82
 
Posts: 625
Joined: Wed Mar 14, 2007 6:49 pm
Location: San Cristobal de las Casas, Chiapas México

Re: Parar un programa en red.

Postby WilliamAdami » Sun May 22, 2011 2:37 pm

Hola , Yo utilizo lo codigo seguinte para LOGOFF del sistema quando lo MOUSE o lo KEYBOARD estiverem inactivos por un tiempo ( nTempo_Espera ) . Talvez possa ajuda-lo.

Saludos

William Adami (Brasil)


* exemplo do uso da classe Tinativo
* Apos um tempo de inatividade do mouse
* e do teclado chama uma funcao qualquer.

#include "fivewin.ch"

static oWnd

*************
function main
*************

nTempo_espera:=10 //Tempo a ser esperado ate chamar a funcao

cNome_funcao:="LOGOFF()" //nome da funcao a ser chamada quando
//chegar no tempo de espera

lTimercontinua:=.f. //se apos executar a funcao , continua monitorando
//a inatividade do mouse e teclado.

define window oWnd title "Teste de teclado e mouse"

activate window oWnd on init tinativo():new(nTempo_espera,cNome_funcao, lTimerContinua)

return NIL


function logoff

msgalert("AQUI SU FUNCTION DE LOGOFF !","AVISO")

return nil


*****TINATIVO.PRG
*****************************************
* CLASSE PARA DETECTAR SE O SISTEMA ESTA
* INATIVO POR (N) SEGUNDOS, E SE ESTIVER,
* CHAMA UMA FUNCAO (PODE SER UMA FUNCAO
* DE LOGOFF , DESCANSO DE TELA , ETC..)
*****************************************
* AUTOR DA FUNۂO ORIGINAL :
* POMPEO (GUARATINGUETA)
* MIGRAۂO DA FUNۂO PARA CLASSE:
* WILLIAM DE BRITO ADAMI
*****************************************
#include "fivewin.ch"

CLASS TINATIVO

DATA nTimeInpAntes
DATA nTimeInpDepois
DATA cTimeAtu
DATA nTempo
DATA oTimerTime
DATA cFunc
DATA lContinuar

METHOD NEW( nTime, cFuncao, lContinua ) CONSTRUCTOR

METHOD ver_tempo()

ENDCLASS


**********************
METHOD new(ntime,cFuncao,lContinua) CLASS TINATIVO
**********************
::cfunc:=cfuncao
::ntempo:=ntime
::lContinuar:=lContinua
::oTimerTime := TTimer():New( 1000, { || ::VER_TEMPO() } )
::oTimerTime:Activate()
::cTimeAtu := time()
::nTimeInpAntes := getInputState() // 0 = erro

return self


*************************
METHOD VER_TEMPO CLASS TINATIVO
*************************
::nTimeInpDepois := getInputState()
if ( ::nTimeInpDepois - ::nTimeInpAntes ) > 0
::nTimeInpAntes := getInputState()
::cTimeAtu := time()
endif


if ( CONVTIME(time()) - CONVTIME(::cTimeAtu) ) > ::ntempo
::oTimerTime:DeActivate()

aux:=::cfunc

* aqui executa a funcao

&aux

if ::lContinuar

::oTimerTime:Activate()
::cTimeAtu := time()

endif


endif

return NIL


FUNCTION CONVTIME(ZZ)
Z:=(VAL(LEFT(ZZ,2))*360)+(VAL(SUBSTR(ZZ,4,2))*60)+VAL(RIGHT(ZZ,2))
RETURN Z


**----------------------------------------------------------------------
#pragma BEGINDUMP
#define _WIN32_WINNT 0x0500
#define WINVER 0x0500
#include "windows.h"
#include "hbapi.h"
HB_FUNC( GETINPUTSTATE )
{
LASTINPUTINFO lpi;
lpi.cbSize = sizeof(LASTINPUTINFO);
if (!GetLastInputInfo(&lpi))
{
hb_retni(0);
}
hb_retni(lpi.dwTime);
}
#pragma ENDDUMP
WilliamAdami
 
Posts: 68
Joined: Tue Apr 14, 2009 9:26 pm
Location: Brasil

Re: Parar un programa en red.

Postby FiveWiDi » Sun May 22, 2011 6:59 pm

Andrés González wrote:Hola compañeros del foro, estoy desarrollando un programa que me controla los accesos de todos los programas por los usuarios, con lo cual sé cuando un programa está abierto. Muchas veces los usuarios lo dejan funcionando durante el fin de semana y como mi programación se basa en ficheros externos, cuando algunas veces intento modificar alguno de estos ficheros externos están cogidos por el programa principal y no me deja modificarlos hasta que el usuario deje de utilizar dicho programa. Me preguntaba si existe alguna manera de parar la execución del programa desde la red. Estoy pensando en poner algun timer que me mire un fichero externo y dependiendo de los que contenga ese fichero lo pare, evite que la gente se conecte o que controle la inactividad del programa.

Sabéis si existe alguna otra manera de parar el programa en red? Necesito solo parar ese programa no el resto de aplicaciones, con lo que no me valen cosas como el VNC el TeamViewer o similares. Tampoco matar los procesos desde el servidor, necesito que el programa se cierre correctamente y no me deje colgado ningún proceso. Alguna idea de como hacerlo, alguien ha hecho algo similar?

Un saludo.

Hola,

Yo lo haría con un TIMER.

Cada 60 minutos abro una tabla miro el valor de un campo (por ejemplo ALACALLE), si su valor es .T. salgo del sistema.

En el momento de entrar en el sistema hago lo mismo, y si su valor sigue siendo .T. pues salgo antes de hacer nada más.

Así sabes que si tu das valor .T. a ese campo, como mucho al cabo de una hora estan todos fuera, haces lo que quieras y das valor .F. al campo.
Un Saludo
Carlos G.

FiveWin 24.02 + Harbour 3.2.0dev (r2403071241), BCC 7.7 Windows 10
FiveWiDi
 
Posts: 1189
Joined: Mon Oct 10, 2005 2:38 pm

Re: Parar un programa en red.

Postby Andrés González » Mon May 23, 2011 5:32 am

Gracias a todos por vuestras respuestas, especialmente a williamadami. Pruebo lo que tu has puesto y luego comento.
Saludos

Andrés González desde Mallorca
User avatar
Andrés González
 
Posts: 628
Joined: Thu Jan 19, 2006 10:45 am
Location: Mallorca

Re: Parar un programa en red.

Postby JmGarcia » Mon May 23, 2011 3:21 pm

Y algo tan sencillo como un TXT en el servidor que contenga "comandos inventados" por nosotros en el sentido de que si el fichero esta vacio no pasa nada.
Si vemos que el usuario "USER-1" lo queremos "matar" pues modificamos ese TXT poniendo una línea con el contenido "USER-1 LOGOFF".
En el programa del USER-1 un timer (no muy espaciado, cada 5 minutos por ejemplo) que leea ese fichero TXT y si "se da por aludido" en el contenido del mismo se "auto-mata" el programa.

¿ Me he explicado ? o me he muerto yo tambien jejejejajajaja :P
Mi abuelo decía: Los aviones vuelan porque Dios quiere, y los helicópteros ni Dios sabe porque vuelan.
FWH 16.02, xHarbour 1.2.3, Harbour 3.2.0, WorkShop 4.5, AJ Make 0.30, Borlan BCC 7.00, VisualStudio 2013
User avatar
JmGarcia
 
Posts: 654
Joined: Mon May 29, 2006 3:14 pm
Location: Madrid - ESPAÑA


Return to FiveWin para Harbour/xHarbour

Who is online

Users browsing this forum: Google [Bot] and 49 guests