Fórum Comando para fechar programa com TCP Client Server #430238
03/12/2012
0
Gostaria do cliente enviar um comando para o servidor para que o programa fosse fechado, mas não está dando certo, alguém sabe pq, e sabe como q posso fazer para este comando funcionar?
estou fazendo desta maneira:
Mensagem := AContext.Connection.IOHandler.ReadLn(TIdTextEncoding.Default); if (Mensagem = 'FECHARPROGRAMA') then Application.Terminate;
Obrigado!!
Fernando Vr
Curtir tópico
+ 0Posts
04/12/2012
Fernando Vr
Gostei + 0
04/12/2012
Rodolpho Silva
Mensagem := AContext.Connection.IOHandler.ReadLn(TIdTextEncoding.Default); if (Mensagem = 'FECHARPROGRAMA') then Halt;
Porém, isso é como "matar" o seu processo no S.O. ou seja, termina a execução do mesmo sem tratamento algum.
Gostei + 0
04/12/2012
Fernando Vr
Mensagem := AContext.Connection.IOHandler.ReadLn(TIdTextEncoding.Default); if (Mensagem = 'FECHARPROGRAMA') then Halt;
Porém, isso é como "matar" o seu processo no S.O. ou seja, termina a execução do mesmo sem tratamento algum.
Ah obrigado amigo, testarei aqui, mas fazendo desta forma tem algo q possa ser prejudicial ao programa? por terminar sem nenhum tratamento??
Gostei + 0
04/12/2012
Wasley Portes
Gostei + 0
04/12/2012
Fernando Vr
Então Wasley Alves Portes eu não gostaria de utilizar sockets pq eu to usando o Delphi XE2, queria utilizar o Indy mesmo.
Mas em sockets você tem alguma idéia de como fazia pra fechar totalmente o aplicativo? do modo q o amigo Rodolpho123 passou ele até fecha o servidor, mas o mesmo continua ativo nos processos do windows, não está fechando completamente.
Gostei + 0
04/12/2012
Fernando Vr
Mensagem := AContext.Connection.IOHandler.ReadLn(TIdTextEncoding.Default); if (Mensagem = 'FECHARPROGRAMA') then Halt;
Porém, isso é como "matar" o seu processo no S.O. ou seja, termina a execução do mesmo sem tratamento algum.
Eu testei aqui Rodolpho123, e to tendo um problema ainda, o form do programa some da tela com o comando que vc me passou, mas ai tentei executar o servidor novamente e dá o seguinte erro.
[b]Could not bind socket. Address and port are already in use.[/b]
Então fui verificar os processos do windows e o programa continua aberto, só o form q sumiu mas o programa continua lá. Está dando o mesmo problema do Application.Terminate;
Será q não tem nenhum modo de fazer ele fechar por completo??
Gostei + 0
04/12/2012
Rodolpho Silva
Tente isso:
Mensagem := AContext.Connection.IOHandler.ReadLn(TIdTextEncoding.Default); if (Mensagem = 'FECHARPROGRAMA') then DoShutdown;
Gostei + 0
04/12/2012
Wasley Portes
Gostei + 0
05/12/2012
Fernando Vr
Tente isso:
Mensagem := AContext.Connection.IOHandler.ReadLn(TIdTextEncoding.Default); if (Mensagem = 'FECHARPROGRAMA') then DoShutdown;
Então Rodolpho123 Não é um Tservice não, é um VCL Forms Aplication com TIdTCPServer dos componentes do Indy10.
O comando pra fechar, chega a fechar o form, mas continua ativo nos processos do windows, da uma olhada na imagem abaixo:
[img]http://i45.tinypic.com/15ov402.jpg[/img]
[b]Wasley Alves Portes[/b]
Eu já fazia desta forma Wasley, da uma olhada no início deste tópico como eu tava fazendo ao receber a mensagem do cliente, o problema q a unica coisa q acontece é q o form fecha mas a aplicação continua rodando nos processos do windows. Da uma olhada na imagem acima que foi feita depois q o comando pra fechar foi executado. Você pode perceber q a aplicação continua lá.
Muito obrigado pela ajuda amigos, se conhecer outra solução por favor me ajude, ja pesquisei muito sobre isso e até agora não encontrei nenhuma solução.
Gostei + 0
05/12/2012
Fernando Vr
O comando para fechar o aplicativo completamente inclusive pelo processo do windows, seria este:
[b] TerminateProcess(GetCurrentProcess, 0);[/b]
Então o meu código ficou desta forma:
if (Mensagem = 'FECHARPROGRAMA') then TerminateProcess(GetCurrentProcess, 0);
Abraços.
Gostei + 0
Clique aqui para fazer login e interagir na Comunidade :)