No funciona IsExeRunning()

No funciona IsExeRunning()

Postby thefull » Mon Jun 16, 2008 2: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__)
User avatar
thefull
 
Posts: 731
Joined: Fri Oct 07, 2005 7:42 am
Location: Barcelona

Postby karinha » Mon Jun 16, 2008 3:01 pm

Intente asi,

Code: Select all  Expand view
    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
User avatar
karinha
 
Posts: 7629
Joined: Tue Dec 20, 2005 7:36 pm
Location: São Paulo - Brasil

Postby thefull » Mon Jun 16, 2008 3:18 pm

karinha wrote:Intente asi,

Code: Select all  Expand view
    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__)
User avatar
thefull
 
Posts: 731
Joined: Fri Oct 07, 2005 7:42 am
Location: Barcelona

Postby Antonio Linares » Mon Jun 16, 2008 6:43 pm

Rafa,

Prueba a usar esta modificación de IsExeRunning():
Code: Select all  Expand view
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
User avatar
Antonio Linares
Site Admin
 
Posts: 41872
Joined: Thu Oct 06, 2005 5:47 pm
Location: Spain

Postby thefull » Tue Jun 17, 2008 7:34 am

Antonio Linares wrote:Rafa,

Prueba a usar esta modificación de IsExeRunning():
Code: Select all  Expand view
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__)
User avatar
thefull
 
Posts: 731
Joined: Fri Oct 07, 2005 7:42 am
Location: Barcelona

Postby cuatecatl82 » Tue Jun 17, 2008 2: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
User avatar
cuatecatl82
 
Posts: 625
Joined: Wed Mar 14, 2007 6:49 pm
Location: San Cristobal de las Casas, Chiapas México

Postby thefull » Tue Jun 17, 2008 5: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... :oops: :oops:

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__)
User avatar
thefull
 
Posts: 731
Joined: Fri Oct 07, 2005 7:42 am
Location: Barcelona

Postby Antonio Linares » Tue Jun 17, 2008 6: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
User avatar
Antonio Linares
Site Admin
 
Posts: 41872
Joined: Thu Oct 06, 2005 5:47 pm
Location: Spain

Postby thefull » Wed Jun 18, 2008 3: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__)
User avatar
thefull
 
Posts: 731
Joined: Fri Oct 07, 2005 7:42 am
Location: Barcelona

Postby karinha » Wed Jun 18, 2008 3:25 pm

Rafa, podrias testar esto, se funciona?? Por favor.
Code: Select all  Expand view
    IF ISWINDOWVISIBLE( hWnd )
        QUIT
    ENDIF


Gracias,

saludos
João Santos - São Paulo - Brasil - Phone: +55(11)95150-7341
User avatar
karinha
 
Posts: 7629
Joined: Tue Dec 20, 2005 7:36 pm
Location: São Paulo - Brasil

Postby thefull » Wed Jun 18, 2008 4:36 pm

karinha wrote:Rafa, podrias testar esto, se funciona?? Por favor.
Code: Select all  Expand view
    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__)
User avatar
thefull
 
Posts: 731
Joined: Fri Oct 07, 2005 7:42 am
Location: Barcelona

Postby Alfredo Arteaga » Wed Jun 18, 2008 6:58 pm

Bueno, FindWindow() parece funcionar pero si hay una MDIChild maximizada permite abrir nuevamente la aplicación lo mismo sucede con TWCapture().
User avatar
Alfredo Arteaga
 
Posts: 326
Joined: Sun Oct 09, 2005 5:22 pm
Location: Mexico

Postby thefull » Thu Jun 19, 2008 7: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__)
User avatar
thefull
 
Posts: 731
Joined: Fri Oct 07, 2005 7:42 am
Location: Barcelona


Return to FiveWin para Harbour/xHarbour

Who is online

Users browsing this forum: Google [Bot], SantaCroya and 10 guests