FiveTech Support Forums

FiveWin / Harbour / xBase community
Board index FiveWin para Harbour/xHarbour No funciona IsExeRunning()
Posts: 731
Joined: Fri Oct 07, 2005 07:42 AM

No funciona IsExeRunning()

Posted: Mon Jun 16, 2008 02:49 PM

Antonio, esto;
IsExeRunning( cFileName( HB_ARGV( 0 ) ) )

Funciona perfecto, excepto cuando la aplicacion esta corriendo como servicio, devuelve .F.

Intento que el ejecutable solamente existe UNO corriendo..

Saludos

Rafa Carmona ( rafa.thefullARROBAgmail.com___quitalineas__)
Posts: 8523
Joined: Tue Dec 20, 2005 07:36 PM

No funciona IsExeRunning()

Posted: Mon Jun 16, 2008 03:01 PM
Intente asi,

    IF ( ISEXERUNNING( "VENTAS.EXE" ) )

        MsgStop("ESTE PROGRAMA YA SE ENCUENTRA ABIERTO", "ATEN莽ION!")

        RETURN( .F. )

    ENDIF


Saludos.
Jo茫o Santos - S茫o Paulo - Brasil - Phone: +55(11)95150-7341
Posts: 731
Joined: Fri Oct 07, 2005 07:42 AM

No funciona IsExeRunning()

Posted: Mon Jun 16, 2008 03:18 PM
karinha wrote:Intente asi,

    IF ( ISEXERUNNING( "VENTAS.EXE" ) )

        MsgStop("ESTE PROGRAMA YA SE ENCUENTRA ABIERTO", "ATEN莽ION!")

        RETURN( .F. )

    ENDIF


Saludos.


No funciona. ;-(
Uno es llamado desde el servicio, otro es desde la linea de comandos,
si lo creo desde la linea de comandos, y lo llamo desde la linea de comandos si que funciona, pero me interesa que funcione desde el servicio.
Saludos

Rafa Carmona ( rafa.thefullARROBAgmail.com___quitalineas__)
Posts: 44162
Joined: Thu Oct 06, 2005 05:47 PM

No funciona IsExeRunning()

Posted: Mon Jun 16, 2008 06:43 PM
Rafa,

Prueba a usar esta modificaci贸n de IsExeRunning():
HB_FUNC( ISSERVICERUNNIG )
{
   HANDLE hMutex = CreateMutex( NULL, FALSE, ( LPTSTR ) hb_parc( 1 ) );

   hb_retl( GetLastError() == ERROR_ALREADY_EXISTS );

   ReleaseMutex( hMutex );
}
regards, saludos

Antonio Linares
www.fivetechsoft.com
Posts: 731
Joined: Fri Oct 07, 2005 07:42 AM

No funciona IsExeRunning()

Posted: Tue Jun 17, 2008 07:34 AM
Antonio Linares wrote:Rafa,

Prueba a usar esta modificaci贸n de IsExeRunning():
HB_FUNC( ISSERVICERUNNIG )
{
   HANDLE hMutex = CreateMutex( NULL, FALSE, ( LPTSTR ) hb_parc( 1 ) );

   hb_retl( GetLastError() == ERROR_ALREADY_EXISTS );

   ReleaseMutex( hMutex );
}

No funciona.
El problema no es crear el servicio, porque si arranco el servicio;
net start test1
si lo vuelvo a intentar, ya el propio Windows da error.

El problema radica que si ahora hago desde la linea de comandos;
test1

Se ejecuta, y lo que estoy buscando es que NO SE EJECUTE si esta ya
corriendo el servicio.

El problema es que no puedo preguntar si esta el servicio corriendo, ya lo he intentado, porque me dice que si;

FUNCTION MAIN()

IF EstaCorriendoelServicio()
quit
ENDIF

Y claro, NUNCA se ejecutar铆a, porque cuando llega a esa linea, ESTA CORRIENDO!! y se cancela el programa.

El problema es que aunque nuestro programa sea un servicio, realmente no lo es... por ello es bastante complicado encontrar donde se puede
buscar los 3 pies al gato.

Vamos, que lo que seria lo m谩s simple , se me esta convirtiendo en toda una odisea.
Saludos

Rafa Carmona ( rafa.thefullARROBAgmail.com___quitalineas__)
Posts: 625
Joined: Wed Mar 14, 2007 06:49 PM

No funciona IsExeRunning()

Posted: Tue Jun 17, 2008 02:30 PM

TheFull:

Saludos y buenos d铆as desde Mexicco:

Se me ocurre algo de lo mas simple para el control de milti-instancias de tu aplicacion que trabaja servicio, talvez no venga al caso, pero es una idea a fin de cuentas:

Crea una base de datos "disfrazada como otro archivo con extenci贸n diferente", con 2 campos logicos: ENUSO y SALIDA en las cuales puedes controlar y llamar a una funci贸n que te devurlva el valor logico si esta en uso y otro valor logico para sabe si el servicio o la aplicaci贸n termino su ejecucu贸n en forma correcta.

Para poder controlar y comparar que no se use en dos ocasiones ya sea desde linea de comando por ejecuc铆on directa.

Digo es solo una de las mas simples soluciones..

Ojala y puedas encontrar una idea un poco mas brillante y puedas comentarla... :oops: :oops:

Saludos...

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
Posts: 731
Joined: Fri Oct 07, 2005 07:42 AM

No funciona IsExeRunning()

Posted: Tue Jun 17, 2008 05:00 PM
cuatecatl82 wrote:
Digo es solo una de las mas simples soluciones..

Ojala y puedas encontrar una idea un poco mas brillante y puedas comentarla... :-) :-)

Saludos...


El problema es que no quiero depender de algo externo.
La raz贸n es muy simple, te apagan la maquina a la brava, entonces, cuando arranca la maquina de nuevo, la aplicaci贸n no arrancar谩....

Siempre he tenido problemas varios, con soluciones basadas en txt, dbf, etc..
por lo que siempre intento evitarlo en la media que sea posible.

Muchas gracias de todas formas por tu aporte.
Saludos

Rafa Carmona ( rafa.thefullARROBAgmail.com___quitalineas__)
Posts: 44162
Joined: Thu Oct 06, 2005 05:47 PM

No funciona IsExeRunning()

Posted: Tue Jun 17, 2008 06:56 PM

Rafa,

Has probado a usar FindWindow( 0, cTitle ) ?

Si encuentras la ventana anterior entonces el servicio ya estar铆a funcionando.

regards, saludos

Antonio Linares
www.fivetechsoft.com
Posts: 731
Joined: Fri Oct 07, 2005 07:42 AM

No funciona IsExeRunning()

Posted: Wed Jun 18, 2008 03:04 PM
Antonio Linares wrote:Rafa,

Has probado a usar FindWindow( 0, cTitle ) ?

Si encuentras la ventana anterior entonces el servicio ya estar铆a funcionando.


PERFECTO ANTONIO!!

hWnd := FindWindow( 0, cTitle )

if hWnd != 0
showWindow( hWnd, SW_RESTORE )
quit
endif

Funciona de pelotas. Muchas gracias.!!!
Saludos

Rafa Carmona ( rafa.thefullARROBAgmail.com___quitalineas__)
Posts: 8523
Joined: Tue Dec 20, 2005 07:36 PM

No funciona IsExeRunning()

Posted: Wed Jun 18, 2008 03:25 PM
Rafa, podrias testar esto, se funciona?? Por favor.
    IF ISWINDOWVISIBLE( hWnd )
        QUIT
    ENDIF


Gracias,

saludos
Jo茫o Santos - S茫o Paulo - Brasil - Phone: +55(11)95150-7341
Posts: 731
Joined: Fri Oct 07, 2005 07:42 AM

No funciona IsExeRunning()

Posted: Wed Jun 18, 2008 04:36 PM
karinha wrote:Rafa, podrias testar esto, se funciona?? Por favor.
    IF ISWINDOWVISIBLE( hWnd )
        QUIT
    ENDIF


Gracias,

saludos


驴 Como puedes saber el hWnd , si no es busc谩ndolo previamente ?
Lo que hace esa funci贸n es saber si esta o no visible la ventana.

Si con FindWindow() ya obtengo el hWnd, ya se que esta corriendo,
el preguntar si esta o no visible es redundante.

Lo que interesa saber es SI EXISTE esa ventana.
Saludos

Rafa Carmona ( rafa.thefullARROBAgmail.com___quitalineas__)
Posts: 326
Joined: Sun Oct 09, 2005 05:22 PM

No funciona IsExeRunning()

Posted: Wed Jun 18, 2008 06:58 PM

Bueno, FindWindow() parece funcionar pero si hay una MDIChild maximizada permite abrir nuevamente la aplicaci贸n lo mismo sucede con TWCapture().

Posts: 731
Joined: Fri Oct 07, 2005 07:42 AM

No funciona IsExeRunning()

Posted: Thu Jun 19, 2008 07:32 AM
Alfredo Arteaga wrote:Bueno, FindWindow() parece funcionar pero si hay una MDIChild maximizada permite abrir nuevamente la aplicaci贸n lo mismo sucede con TWCapture().


Supongo porque deberias tener en cuenta todos los posibles nombres de las ventanas.

Si abres una MDI y la maximizas, el TITULO de la ventana cambia, por lo tanto NO ES IGUAL al que pretendes buscar, que seria el titulo inicial
de la aplicacion.

Como tengo una simple ventana, ya que va a actuar como servicio, no tengo eso posible problema, pero con MDI, si deberiamos tenerlo en cuenta.
Saludos

Rafa Carmona ( rafa.thefullARROBAgmail.com___quitalineas__)

Continue the discussion