Clipper On Line • Ver Tópico - Informar ao Servidor Windows que a Tarefa terminou

Informar ao Servidor Windows que a Tarefa terminou

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

Moderador: Moderadores

 

Informar ao Servidor Windows que a Tarefa terminou

Mensagempor lugab » 03 Fev 2016 13:12

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...

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
lugab
Colaborador

Colaborador
 
Mensagens: 843
Data de registro: 19 Mai 2009 15:58
Curtiu: 126 vezes
Mens.Curtidas: 38 vezes

Informar ao Servidor Windows que a Tarefa terminou

Mensagempor asimoes » 05 Fev 2016 19:44

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)
Avatar de usuário

asimoes
Colaborador

Colaborador
 
Mensagens: 4919
Data de registro: 26 Abr 2007 16:48
Cidade/Estado: RIO DE JANEIRO-RJ
Curtiu: 341 vezes
Mens.Curtidas: 258 vezes

Informar ao Servidor Windows que a Tarefa terminou

Mensagempor lugab » 05 Fev 2016 20:50

Ó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
lugab
Colaborador

Colaborador
 
Mensagens: 843
Data de registro: 19 Mai 2009 15:58
Curtiu: 126 vezes
Mens.Curtidas: 38 vezes

Informar ao Servidor Windows que a Tarefa terminou

Mensagempor asimoes » 05 Fev 2016 21:09

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)
Avatar de usuário

asimoes
Colaborador

Colaborador
 
Mensagens: 4919
Data de registro: 26 Abr 2007 16:48
Cidade/Estado: RIO DE JANEIRO-RJ
Curtiu: 341 vezes
Mens.Curtidas: 258 vezes

Informar ao Servidor Windows que a Tarefa terminou

Mensagempor lugab » 05 Fev 2016 23:40

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
lugab
Colaborador

Colaborador
 
Mensagens: 843
Data de registro: 19 Mai 2009 15:58
Curtiu: 126 vezes
Mens.Curtidas: 38 vezes

Informar ao Servidor Windows que a Tarefa terminou

Mensagempor asimoes » 06 Fev 2016 08:26

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 de usuário

asimoes
Colaborador

Colaborador
 
Mensagens: 4919
Data de registro: 26 Abr 2007 16:48
Cidade/Estado: RIO DE JANEIRO-RJ
Curtiu: 341 vezes
Mens.Curtidas: 258 vezes

Informar ao Servidor Windows que a Tarefa terminou

Mensagempor asimoes » 06 Fev 2016 09:14

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 de usuário

asimoes
Colaborador

Colaborador
 
Mensagens: 4919
Data de registro: 26 Abr 2007 16:48
Cidade/Estado: RIO DE JANEIRO-RJ
Curtiu: 341 vezes
Mens.Curtidas: 258 vezes

Informar ao Servidor Windows que a Tarefa terminou

Mensagempor ANDRIL » 06 Fev 2016 09:16

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 de usuário

ANDRIL
Usuário Nível 5

Usuário Nível 5
 
Mensagens: 1271
Data de registro: 06 Jul 2004 00:44
Curtiu: 12 vezes
Mens.Curtidas: 46 vezes

Informar ao Servidor Windows que a Tarefa terminou

Mensagempor asimoes » 06 Fev 2016 09:22

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 de usuário

asimoes
Colaborador

Colaborador
 
Mensagens: 4919
Data de registro: 26 Abr 2007 16:48
Cidade/Estado: RIO DE JANEIRO-RJ
Curtiu: 341 vezes
Mens.Curtidas: 258 vezes

Informar ao Servidor Windows que a Tarefa terminou

Mensagempor asimoes » 06 Fev 2016 09:26

Um exemplo:

função no programa.exe que grava em um dbf que será usado pelo kill externo ou do prórpio programa.exe
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 de usuário

asimoes
Colaborador

Colaborador
 
Mensagens: 4919
Data de registro: 26 Abr 2007 16:48
Cidade/Estado: RIO DE JANEIRO-RJ
Curtiu: 341 vezes
Mens.Curtidas: 258 vezes

Informar ao Servidor Windows que a Tarefa terminou

Mensagempor asimoes » 06 Fev 2016 09:42

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

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 de usuário

asimoes
Colaborador

Colaborador
 
Mensagens: 4919
Data de registro: 26 Abr 2007 16:48
Cidade/Estado: RIO DE JANEIRO-RJ
Curtiu: 341 vezes
Mens.Curtidas: 258 vezes

Informar ao Servidor Windows que a Tarefa terminou

Mensagempor ANDRIL » 06 Fev 2016 09:46

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 de usuário

ANDRIL
Usuário Nível 5

Usuário Nível 5
 
Mensagens: 1271
Data de registro: 06 Jul 2004 00:44
Curtiu: 12 vezes
Mens.Curtidas: 46 vezes

Informar ao Servidor Windows que a Tarefa terminou

Mensagempor asimoes » 06 Fev 2016 09:48

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)
Avatar de usuário

asimoes
Colaborador

Colaborador
 
Mensagens: 4919
Data de registro: 26 Abr 2007 16:48
Cidade/Estado: RIO DE JANEIRO-RJ
Curtiu: 341 vezes
Mens.Curtidas: 258 vezes

Informar ao Servidor Windows que a Tarefa terminou

Mensagempor lugab » 06 Fev 2016 17:10

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
lugab
Colaborador

Colaborador
 
Mensagens: 843
Data de registro: 19 Mai 2009 15:58
Curtiu: 126 vezes
Mens.Curtidas: 38 vezes

Informar ao Servidor Windows que a Tarefa terminou

Mensagempor JoséQuintas » 06 Fev 2016 18:54

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, multithread, dbfcdx, ADO+MySql, PNotepad
"The world is full of kings and queens, who blind our eyes and steal our dreams Its Heaven and Hell"

https://github.com/JoseQuintas/
Avatar de usuário

JoséQuintas
Membro Master

Membro Master
 
Mensagens: 18161
Data de registro: 26 Fev 2007 11:59
Cidade/Estado: São Paulo-SP
Curtiu: 15 vezes
Mens.Curtidas: 1215 vezes

Próximo



Retornar para Ferramentas de Apoio

Quem está online

Usuários vendo este fórum: Nenhum usuário registrado online e 6 visitantes


Ola Amigo, espero que meu site e forum tem lhe beneficiado, com exemplos e dicas de programacao.
Entao divulgue o link da Doacao abaixo para seus amigos e redes sociais ou faça uma doacao para o site forum...
MUITO OBRIGADO PELA SUA DOACAO!
Faça uma doação para o forum
cron
v
Olá visitante, seja bem-vindo ao Fórum Clipper On Line!
Efetue o seu login ou faça o seu Registro