Jump to content
Fivewin Brasil

Fechar outro aplicativo


emotta

Recommended Posts

Pessoal estou precisando fechar outro aplicativo através de um programa.

Eu tenho vários executáveis do sistema sendo executados em um servidor. Basicamente eles ficam checando uma tabela no SQL e quando caí algo nela, um desses serviços pega o registro pra processar. Este processo geralmente é um relatório do sistema.

Ocorre que eventualmente o aplicativo que está processando o relatório da de memória, o famoso: 

Unrecoverable error 9006: 
---------------------------
hb_xgrab can't allocate memory
 

Esse erro aparece dentro de uma telinha, tipo o msgstop do fivewin, e fica aguardando o OK para só então finalizar o executavel.

 

É aí que entra minha necessidade: Eu preciso que um outro executavel que está rodando neste mesmo servidor, identifique que essa janela foi aberta e então obtenha o PID do executável. Tendo o PID eu já consigo fechar o executavel.

Então meu problema não é o estouro de memória do HB_XGRAB e nem fechar o aplicativo através do PID, o que eu preciso é saber que aconteceu esse erro e aí tomar minhas providencias.

 

Eu utilizo xHarbour no modo console, mas se a solução for em fivewin ou até em outra linguagem já vai ajudar muito.

 

vlwwww

 

Link to comment
Share on other sites

consegui fazer, se algum tb precisar de algo doido como isso segue o código...

 

#DEFINE CRLF Chr(13) + Chr(10)
 
Function TestProcess(nSecs)
Local cFile := "services.txt"
Local cCmd := 'tasklist /fi "imagename eq pontorpo.exe" /v /fo table > ' + cFile
Local nPid
Local cFile_Killed := "killeds.txt"
 
If nSecs == nil
   nSecs := 30
EndIf
 
While Inkey(nSecs) # 27
   ? Time() + " Verificando... "
   __Run(cCmd)
 
   HB_FUSE(cFile)
   While !HB_FEOF()
      cLinha := HB_FREADLN()
      If Upper("Unrecoverable error 9006") in Upper(cLinha)
         nPid := Val(SubStr(cLinha, 27, 8))
         ? nPid
         KillPid(nPid)
         MemoWrit(cFile_Killed, Memoread(cFile_Killed) + Time() + " => " + cLinha + CRLF)
      EndIf
      HB_FSKIP()
   EndDo
   HB_FUSE()
EndDo
 
Return
 
Static Function KillPid(nPid)
Local cCmd := "taskkill /PID ? /F"
 
cCmd := StrTran(cCmd, "?", AllTrim(Str(nPid,10)))
? cCmd
__Run(cCmd)
 
Return
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...