Interceptar msg do DOS
Olá... o fato é o seguinte... estou fazendo uma chamada do meu aplicativo para um executável do DOS... Se existir um possível erro, onde o executável do DOS não venha terminar a operação este apresentará a mensagem de erro no promt, e no ambiente DOS...
A minha dificuldade é: como eu poderia ´pegar´ esta mensagem de erro do exe DOS e transmitir para o meu aplicativo Delphi apresentando-o em um MessageBox, por exemplo...
Existe a possibilidade de interfacearmos estas mensagens? É difícil isto?
Agradeço desde já, a todos...
A minha dificuldade é: como eu poderia ´pegar´ esta mensagem de erro do exe DOS e transmitir para o meu aplicativo Delphi apresentando-o em um MessageBox, por exemplo...
Existe a possibilidade de interfacearmos estas mensagens? É difícil isto?
Agradeço desde já, a todos...
Nerdex
Curtidas 0
Respostas
Thiago Vidal
20/04/2004
Voce pode tentar executar a linha da seguinte forma:
Se o programa do DOS escrever para stdout (o que a maioria faz ou deveria fazer) dentro de arqtemp.txt estará a mensagem retornada, voce só precisa ler a mesnagem usando um FileStream ou alguma outra forma de acesso a arquivo texto e em seguita apagar o arquivo temporário.
Talvez nao seja a solução mais elegante, mas é funcional.
"comando.exe > arqtemp.txt"
Se o programa do DOS escrever para stdout (o que a maioria faz ou deveria fazer) dentro de arqtemp.txt estará a mensagem retornada, voce só precisa ler a mesnagem usando um FileStream ou alguma outra forma de acesso a arquivo texto e em seguita apagar o arquivo temporário.
Talvez nao seja a solução mais elegante, mas é funcional.
GOSTEI 0
Nerdex
20/04/2004
Ahh... é Thiago, eu estava desconfiado disto !! pois após o erro este arquivo .tmp é criado e eu não podia deletá-lo pq estava em uso !!
Juro...!! que eu até desliguei o micro e o liguei novamente para poder deletá-los, não sabendo a fonte de criação deles !! Agora ja sei...
Mas Thiago... sobre isto = ´comando.exe > arqtemp.txt´
Eu posso embutir à uma chamada para um showmessage, comandos ShellExecute ou WinExec para a exibição direta da mensagem? Ou tenho que abrir o arquivo .temp de forma stream e assim convertê-lo para tipo string? Me dê a dica final e a mais aplicável para o caso...
Obrigado
Juro...!! que eu até desliguei o micro e o liguei novamente para poder deletá-los, não sabendo a fonte de criação deles !! Agora ja sei...
Mas Thiago... sobre isto = ´comando.exe > arqtemp.txt´
Eu posso embutir à uma chamada para um showmessage, comandos ShellExecute ou WinExec para a exibição direta da mensagem? Ou tenho que abrir o arquivo .temp de forma stream e assim convertê-lo para tipo string? Me dê a dica final e a mais aplicável para o caso...
Obrigado
GOSTEI 0
Adilsond
20/04/2004
Como executar uma aplicação DOS e pegar seu retorno em delphi.
Adenilton Rodrigues
Delphi
17/09/2002 17:58:48
[url]http://lib.seven.com.br/ampliar.asp?codcat=1&codartigo=500[/url]
Adenilton Rodrigues
Delphi
17/09/2002 17:58:48
[url]http://lib.seven.com.br/ampliar.asp?codcat=1&codartigo=500[/url]
GOSTEI 0
Nerdex
20/04/2004
Obrigado Adenilton... é bem isto que precisava... começarei agora os testes. O site lib.seven é ótimo... pois prioriza divulgar a essência nos contextos de programação, proporcionando um alto nível de qualidade nas informações e conhecimentos, e são altamentes dirigidos para a comunidade de TI. Parabéns pela matéria.
Ogradeço muito a dica...
Ricardo
Santa Maria - RS
pcunit@terra.com.br
Ogradeço muito a dica...
Ricardo
Santa Maria - RS
pcunit@terra.com.br
GOSTEI 0
Nerdex
20/04/2004
Ade... olha... eu fiquei um pouco enrrolado com aquele código, pois ele é meio bruxo de entender... Me dá uma orientação... se eu der este comando aí... embaixo por exemplo: e o arquivo ja estiver comprimido, será retornado um erro, certo... como eu faço p/ ´pegar´ a msg de erro disto? Acoplei a string no parâmeto DosApp da procedure mas ñ adiantou...
//UPX - compressão
WinExec(´Command.com /c upx --best C:\Dados\Arp.exe´, 0);
Depois eu desejaria fazer um para o GFix e o GBack do IB, para disponibilizar p/ o usuário um interfaceamento gráfico para uma possível manutenção de corrupção de dados, caso fosse necessário... que acha?
Mande-me um exemplo por e-mail?
pcunit@terra.com.br
//UPX - compressão
WinExec(´Command.com /c upx --best C:\Dados\Arp.exe´, 0);
Depois eu desejaria fazer um para o GFix e o GBack do IB, para disponibilizar p/ o usuário um interfaceamento gráfico para uma possível manutenção de corrupção de dados, caso fosse necessário... que acha?
Mande-me um exemplo por e-mail?
pcunit@terra.com.br
GOSTEI 0
Adilsond
20/04/2004
A função criada pelo Adenilton executa o comando passado a ele espera o fim do mesmo e retorna o seu resultado ao Memo passado como parametro. Então voce deve executar o comando assim:
CaptureConsoleOutput(´C:\Diretorio\upx.exe --best C:\Diretorio\Arquivo.exe´, Memo1);
CaptureConsoleOutput(´C:\Diretorio\upx.exe --best C:\Diretorio\Arquivo.exe´, Memo1);
GOSTEI 0