Interceptar msg do DOS

Delphi

20/04/2004

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


Nerdex

Nerdex

Curtidas 0

Respostas

Thiago Vidal

Thiago Vidal

20/04/2004

Voce pode tentar executar a linha da seguinte forma:

"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

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


GOSTEI 0
Adilsond

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]


GOSTEI 0
Nerdex

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


GOSTEI 0
Nerdex

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


GOSTEI 0
Adilsond

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);


GOSTEI 0
POSTAR