Informar ao Servidor Windows que a Tarefa terminou

Fórum sobre ferramentas de apoio à programação (Clipper/[x]Harbour)

Moderador: Moderadores

lugab
Colaborador
Colaborador
Mensagens: 843
Registrado em: 19 Mai 2009 15:58

Informar ao Servidor Windows que a Tarefa terminou

Mensagem por lugab »

Amigos, salve, salve....

Quado se sai do programa em uso, demora para o Windows notificar o servidor que a tarefa terminou, principalmente quando a tarefa termina abruptanente, por algum tipo de erro...

Algum de vcs sabe se existe algum comando do windows que encerre a tarefa já teminada e que possa ser colocada no Arquivo .BAT , logo após a linha para executar o programa ??

ex...

Código: Selecionar todos

f:
cd\dados
programa.exe
kill "programa.exe"  <-- Aqui é um mero chute, local onde colocar o comando pra avisar o Windows que a tarefa da linha acima treminou, ok ?
PS: o "TSKILL" do Windows é inviável, pq só funciona se o BAT tivesse como saber, previamente, o número do processo que o Programa.exe do exemplo
ganhou na lista de Processos em curso no Windows, que se trata de uma numeração dinâmica e que se obtém se exeutar o TASKLIST
Grato,
lugab
Avatar do usuário
asimoes
Colaborador
Colaborador
Mensagens: 4919
Registrado em: 26 Abr 2007 16:48
Localização: RIO DE JANEIRO-RJ

Informar ao Servidor Windows que a Tarefa terminou

Mensagem por asimoes »

Procure no fórum por WIN_KILLPROCESS
►Harbour 3.x | Minigui xx-x | HwGui◄
Pense nas possibilidades abstraia as dificuldades.
Não corrigir nossas falhas é o mesmo que cometer novos erros.
A imaginação é mais importante que o conhecimento. (Albert Einstein)
lugab
Colaborador
Colaborador
Mensagens: 843
Registrado em: 19 Mai 2009 15:58

Informar ao Servidor Windows que a Tarefa terminou

Mensagem por lugab »

Ótima dica, Asimoes, valeu...

A nível local funcionou Perfeito, MUITO OBRIGADO.....

Resta saber quando essa função for disparada pela estação que estiver acessando Executável e dados em um Servidor comum ( pasta mapeada, tipo F:\) e também
quando ela for disparado por estação que esta´acessando Prg+Dados do servidor, via TS ..



Otimo canaval pra vc
lugab
Avatar do usuário
asimoes
Colaborador
Colaborador
Mensagens: 4919
Registrado em: 26 Abr 2007 16:48
Localização: RIO DE JANEIRO-RJ

Informar ao Servidor Windows que a Tarefa terminou

Mensagem por asimoes »

Lugab,

Você pode criar um programa (killprograma.exe) com a função WIN_KILLPROCESS e colocar na bat conforme você postou.

:
cd\dados
programa.exe
killprograma.exe (mata o programa.exe do processo do windows)
►Harbour 3.x | Minigui xx-x | HwGui◄
Pense nas possibilidades abstraia as dificuldades.
Não corrigir nossas falhas é o mesmo que cometer novos erros.
A imaginação é mais importante que o conhecimento. (Albert Einstein)
lugab
Colaborador
Colaborador
Mensagens: 843
Registrado em: 19 Mai 2009 15:58

Informar ao Servidor Windows que a Tarefa terminou

Mensagem por lugab »

Sim, foi isso o que fiz, Asimoes...

A nível local funcionou perfeito: Programa.exe + dados + computador local, tudo no disco C...

A questão é: Acessando via TS, onde várias pessoas estão usando o mesmo PROGRAMA.EXE+Dados no Servidor. Eu acredito que essa função vai killar é todo mundo, em vez de apenas o usuário desejado,
lugab
Avatar do usuário
asimoes
Colaborador
Colaborador
Mensagens: 4919
Registrado em: 26 Abr 2007 16:48
Localização: RIO DE JANEIRO-RJ

Informar ao Servidor Windows que a Tarefa terminou

Mensagem por asimoes »

Lugab,

Tem como resolver isso, veja se concorda comigo, toda vez que o usuário executar o programa.exe, um id de processo é criado, o programa.exe poderia gravar este id em um arquivo de controle de acesso em caso de gpf do programa.exe o kill seria para o id do gpf
►Harbour 3.x | Minigui xx-x | HwGui◄
Pense nas possibilidades abstraia as dificuldades.
Não corrigir nossas falhas é o mesmo que cometer novos erros.
A imaginação é mais importante que o conhecimento. (Albert Einstein)
Avatar do usuário
asimoes
Colaborador
Colaborador
Mensagens: 4919
Registrado em: 26 Abr 2007 16:48
Localização: RIO DE JANEIRO-RJ

Informar ao Servidor Windows que a Tarefa terminou

Mensagem por asimoes »

Lugab o acesso remoto é feito com único usuário ? ou previamente cadastrados?
►Harbour 3.x | Minigui xx-x | HwGui◄
Pense nas possibilidades abstraia as dificuldades.
Não corrigir nossas falhas é o mesmo que cometer novos erros.
A imaginação é mais importante que o conhecimento. (Albert Einstein)
Avatar do usuário
ANDRIL
Usuário Nível 5
Usuário Nível 5
Mensagens: 1297
Registrado em: 06 Jul 2004 00:44
Contato:

Informar ao Servidor Windows que a Tarefa terminou

Mensagem por ANDRIL »

lugab escreveu:A questão é: Acessando via TS, onde várias pessoas estão usando o mesmo PROGRAMA.EXE+Dados no Servidor. Eu acredito que essa função vai killar é todo mundo, em vez de apenas o usuário desejado,
Teoricamente não, uma vez que cada sessão TS é independente da outra, ou seja, cada usuário abre sua própria instância. Faça o teste real para tirar essa dúvida. Cada usuário tem seu desktop e configurações personalizadas o mesmo deve ocorrer com um programa aberto por ele.
Até+
Clipper 5.2e / Blinker 5.1 / Harbour 3.2 / GTwvg
Avatar do usuário
asimoes
Colaborador
Colaborador
Mensagens: 4919
Registrado em: 26 Abr 2007 16:48
Localização: RIO DE JANEIRO-RJ

Informar ao Servidor Windows que a Tarefa terminou

Mensagem por asimoes »

Andril,

Se é assim que funciona então em caso de crash da aplicação e se ficar algum id de processo, pode fazer o kill, sem afetar os outros acessos, desde que seja o próprio id.
►Harbour 3.x | Minigui xx-x | HwGui◄
Pense nas possibilidades abstraia as dificuldades.
Não corrigir nossas falhas é o mesmo que cometer novos erros.
A imaginação é mais importante que o conhecimento. (Albert Einstein)
Avatar do usuário
asimoes
Colaborador
Colaborador
Mensagens: 4919
Registrado em: 26 Abr 2007 16:48
Localização: RIO DE JANEIRO-RJ

Informar ao Servidor Windows que a Tarefa terminou

Mensagem por asimoes »

Um exemplo:

função no programa.exe que grava em um dbf que será usado pelo kill externo ou do prórpio programa.exe

Código: Selecionar todos

FUNCTION SistemaExecutando
LOCAL aProcs := {},  cExeName
   cExeName := SubStr(hb_ArgV(0), RAT(hb_PS(), hb_ArgV(0)) + 1 )
   WIN_GetProcessList( aProcs, cExeName )
   DbUseArea(.T., "DBFCDX", "ACESSO", "ACESSO", .T.)
   ACESSO->(DbAppend())
   ACESSO->Data:=Date()
   ACESSO->Hora:=Time()
   ACESSO->ID  :=aProcs[Len( aProcs ),2]
   ACESSO->(DbCommit(), DbUnLock())
RETURN .T.
►Harbour 3.x | Minigui xx-x | HwGui◄
Pense nas possibilidades abstraia as dificuldades.
Não corrigir nossas falhas é o mesmo que cometer novos erros.
A imaginação é mais importante que o conhecimento. (Albert Einstein)
Avatar do usuário
asimoes
Colaborador
Colaborador
Mensagens: 4919
Registrado em: 26 Abr 2007 16:48
Localização: RIO DE JANEIRO-RJ

Informar ao Servidor Windows que a Tarefa terminou

Mensagem por asimoes »

Se o acesso remoto tem sua própria instância usuário distinto então a função pode ser assim:

Código: Selecionar todos

FUNCTION SistemaExecutando
LOCAL aProcs := {}, cExeName

   cExeName := SubStr(hb_ArgV(0), RAT(hb_PS(), hb_ArgV(0)) + 1 )
   WIN_GetProcessList( aProcs, cExeName )
   DbUseArea(.T., "DBFCDX", "ACESSO", "ACESSO", .T.)
   ACESSO->(DbAppend())
   ACESSO->Data:=Date()
   ACESSO->Hora:=Time()
   ACESSO->ID  :=aProcs[Len( aProcs ), 2] //id
   ACESSO->User:=aProcs[Len( aProcs ), 4] //user
   ACESSO->(DbCommit(), DbUnLock())

RETURN .T.
►Harbour 3.x | Minigui xx-x | HwGui◄
Pense nas possibilidades abstraia as dificuldades.
Não corrigir nossas falhas é o mesmo que cometer novos erros.
A imaginação é mais importante que o conhecimento. (Albert Einstein)
Avatar do usuário
ANDRIL
Usuário Nível 5
Usuário Nível 5
Mensagens: 1297
Registrado em: 06 Jul 2004 00:44
Contato:

Informar ao Servidor Windows que a Tarefa terminou

Mensagem por ANDRIL »

Disse "teoricamente", para tirar a dúvida basta ir ao servidor com as estações usando o sistema e abrir o gerenciador de tarefas, talvez consiga ver quantos do seu programa estão abertos. Usuários eu sei que tem como saber os logados. Tente ai.
Clipper 5.2e / Blinker 5.1 / Harbour 3.2 / GTwvg
Avatar do usuário
asimoes
Colaborador
Colaborador
Mensagens: 4919
Registrado em: 26 Abr 2007 16:48
Localização: RIO DE JANEIRO-RJ

Informar ao Servidor Windows que a Tarefa terminou

Mensagem por asimoes »

Andril, só o lugab pode responder, estou somente passando a dica, :)Pos
►Harbour 3.x | Minigui xx-x | HwGui◄
Pense nas possibilidades abstraia as dificuldades.
Não corrigir nossas falhas é o mesmo que cometer novos erros.
A imaginação é mais importante que o conhecimento. (Albert Einstein)
lugab
Colaborador
Colaborador
Mensagens: 843
Registrado em: 19 Mai 2009 15:58

Informar ao Servidor Windows que a Tarefa terminou

Mensagem por lugab »

Boa tarde, pessoal

Sim, vou testar as sugestões todas e postar as conclusões aqui....

Fico lisonjeado com tanta ajuda e agradeço a assistência do Asimoes e do Andril

Bom carnaval para todos....
lugab
Avatar do usuário
JoséQuintas
Administrador
Administrador
Mensagens: 20267
Registrado em: 26 Fev 2007 11:59
Localização: São Paulo-SP

Informar ao Servidor Windows que a Tarefa terminou

Mensagem por JoséQuintas »

Sinceramente não entendo essas coisas.

Aqui uso terminal remoto, hbnetio, mysql, e até multithread, tudo junto e misturado.

Será que não exagerou nas rotinas de erro e por isso o problema?

Nota:

SEMPRE uma rotina MAIN fica rodando sem tela aguardando as demais, no caso das LIBs gráficas.
Alguém esqueceu disso, ou você ou a sua lib gráfica.
Avise qual é, pra eu não usar....rs
José M. C. Quintas
Harbour 3.2, mingw, gtwvg mt, fivewin 25.04, multithread, dbfcdx, MySQL, ADOClass, PDFClass, SefazClass, (hwgui mt), (hmg3), (hmg extended), (oohg), PNotepad, ASP, stored procedure, stored function, Linux (Flagship/harbour 3.2)
"The world is full of kings and queens, who blind our eyes and steal our dreams Its Heaven and Hell"

https://github.com/JoseQuintas/
Responder