emotta Posted August 31, 2022 Report Share Posted August 31, 2022 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 Quote Link to comment Share on other sites More sharing options...
emotta Posted September 1, 2022 Author Report Share Posted September 1, 2022 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 Quote Link to comment Share on other sites More sharing options...
Recommended Posts
Join the conversation
You can post now and register later. If you have an account, sign in now to post with your account.