Jump to content
Fivewin Brasil

Como saber se um serviço está em execução?


ram_bh

Recommended Posts

 

Olás!

 

Minha aplicação depende de outro serviço.

Como saber se o serviço está em execução?

 

Obrigado!

 

Rodrigo Melo

Belo Horizonte / MG

FW-17.01 / BCC-7 / xH-123

FUNCTION Main

    // ProcessoUP( "Nome do Processo" )
    ProcessoUP( "Spooler" )
RETURN NIL

FUNCTION ProcessoUP( cProc )
LOCAL nProc := fCreate( "ChkProc.bat" )
LOCAL lRetu := .F.
LOCAL cStrg := "sc query " + cProc + " > ChkProc.txt"
LOCAL nRetu
LOCAL nHndl
LOCAL cBuff

fWrite( nProc, cStrg )
fClose( nProc )

nRetu := ShellExecute( , "open", "ChkProc.bat",,, )

IF nRetu > 32
    nHndl := fOpen( "ChkProc.txt" )
    WHILE hb_fReadLine( nHndl, @cBuff ) == 0
        IF "RUNNING" $ cBuff
            lRetu := .T.
            msgInfo( "PROCESSO " + cProc + " INICIADO.", "AVISO" )
            EXIT
        ENDIF
    ENDDO
ELSE
    msgStop( "O COMANDO NÃO FOI EXECUTADO COM SUCESSO!", "ATENÇÃO" )
ENDIF
fErase( "ChkProc.bat" )
fErase( "ChkProc.txt" )
RETURN ( lRetu )
 

Link to comment
Share on other sites

Baseado no post dos amigos, segue a minha sugestão:

Run ("SC QUERYEX > C:\TEMP\TESTE.TXT")
cRead := MemoRead("C:\TEMP\TESTE.TXT")
IF !WildMatch("*FIREBIRD*SERVER*",Upper(cRead))
   MsgStop("Servidor não está ativo","Alerta")
   Quit
Endif

JMSilva - Caraguatatuba-SP

Link to comment
Share on other sites

Outra Dica:

Run ("Net Start > C:\TEMP\TESTE.TXT")
cRead := MemoRead("C:\TEMP\TESTE.TXT")
//MsgInfo(cRead)
IF !WildMatch("*FIREBIRD*SERVER*",Upper(cRead))
   Run ("net start FirebirdGuardianDefaultInstance") //Ativa o serviço
Endif

JMSilva - Caraguatatuba-SP

Link to comment
Share on other sites

Outra forma, mais interessante:


local oLoc,oWMI,oServ,oDatos,cRead

oLoc := CreateObject( "wbemScripting.SwbemLocator" )
oWMI := oLoc:ConnectServer()
oServ:= oWMI:ExecQuery("Select * from Win32_Service Where started = true")

cRead:=""
For Each oDatos in oServ 
    cRead += ALLTRIM(cValToChar(oDatos:Name))+";"+CHR(13)+CHR(10)
Next
//msginfo(cRead)
IF !WildMatch("*FIREBIRD*SERVER*",Upper(cRead))
   MsgStop("ativando")
   //Run ("net start FirebirdGuardianDefaultInstance") //Ativa o serviço
   Run ("net start FirebirdServerDefaultInstance") //Ativa o serviço
Endif

JMSilva - Caraguatatuba-SP

Link to comment
Share on other sites

 

Uma ideia seria pegar todas as tarefas em execução pelo Windows, jogar num vetor, e depois analisar esse vetor.

Parece-me que já vi algo a respeito, aqui no fórum, mas não me recordo onde.

@mkyx acho que é esta... dê uma olhada:

Function ProgramasInstalados()
	LOCAL   oLoc:= CreateObject( "wbemScripting.SwbemLocator" )
	LOCAL   objWMI:= oLoc:ConnectServer()
	LOCAL   oSoft := objWMI:ExecQuery("Select * from Win32_Product")
	LOCAL   oDatos
	LOCAL aProgromasInstalados:={}

	For Each oDatos in oSoft
     	aadd(aProgromasInstalados,{Alltrim(cValtoChar(oDatos:Name)),;
		  									Alltrim(cValtoChar(oDatos:Version)),;
				  							Alltrim(cValtoChar(oDatos:InstallLocation))})
 	Next

return aProgromasInstalados

 

Link to comment
Share on other sites

MYRUN("tasklist > c:\lista.txt")

Pstring( MemoRead("c:\lista.txt"), "calc.exe") 

FUNCTION Pstring( cString, cpesquisa )
 Local nPos, nTamArq:=Len(cpesquisa)

 nPos := AT( cpesquisa, cString )
 ? subs(cString,nPos,nTamArq)

 If cpesquisa = subs(cString,nPos,nTamArq)
   MYRUN( "TASKKILL /IM "+cpesquisa ) // serviço em execução e matando o processo
 Endif

Return nil


Function MYRUN( cComando )
 local oShell, Ret

  oShell := CreateObject( "WScript.Shell" )
  Ret := oShell:Run( "%comspec% /c " + cComando, 0, .T. )
  oShell := NIL

Return If( Ret=0, .t., .f. )

 

Link to comment
Share on other sites

 

@mkyx acho que é esta... dê uma olhada:


Function ProgramasInstalados()
	LOCAL   oLoc:= CreateObject( "wbemScripting.SwbemLocator" )
	LOCAL   objWMI:= oLoc:ConnectServer()
	LOCAL   oSoft := objWMI:ExecQuery("Select * from Win32_Product")
	LOCAL   oDatos
	LOCAL aProgromasInstalados:={}

	For Each oDatos in oSoft
     	aadd(aProgromasInstalados,{Alltrim(cValtoChar(oDatos:Name)),;
		  									Alltrim(cValtoChar(oDatos:Version)),;
				  							Alltrim(cValtoChar(oDatos:InstallLocation))})
 	Next

return aProgromasInstalados

 

MsgRun("Buscando Dados...","Programas Instalados", {|| xBrowse( ProgramasInstalados() ) }) )

 

Link to comment
Share on other sites

 

Outra forma, mais interessante:



local oLoc,oWMI,oServ,oDatos,cRead

oLoc := CreateObject( "wbemScripting.SwbemLocator" )
oWMI := oLoc:ConnectServer()
oServ:= oWMI:ExecQuery("Select * from Win32_Service Where started = true")

cRead:=""
For Each oDatos in oServ 
    cRead += ALLTRIM(cValToChar(oDatos:Name))+";"+CHR(13)+CHR(10)
Next
//msginfo(cRead)
IF !WildMatch("*FIREBIRD*SERVER*",Upper(cRead))
   MsgStop("ativando")
   //Run ("net start FirebirdGuardianDefaultInstance") //Ativa o serviço
   Run ("net start FirebirdServerDefaultInstance") //Ativa o serviço
Endif

JMSilva - Caraguatatuba-SP

Bom dia!

Essa solução atendeu à minha demanda, obrigado!

Um abraço!

Rodrigo Melo

Link to comment
Share on other sites

Join the conversation

You can post now and register later. If you have an account, sign in now to post with your account.

Guest
Reply to this topic...

×   Pasted as rich text.   Paste as plain text instead

  Only 75 emoji are allowed.

×   Your link has been automatically embedded.   Display as a link instead

×   Your previous content has been restored.   Clear editor

×   You cannot paste images directly. Upload or insert images from URL.

Loading...
×
×
  • Create New...