如何从TDUMP.EXE捕获控制台输出?

时间:2012-07-16 08:18:52

标签: delphi

TDUMP.exe是Delphi RAD Studio的文件转储实用程序。如果我跑

tdump.exe myapp.exe

它将返回有关myapp.exe的一些信息。

我想将tdump.exe的控制台输出捕获到我的VCL gui应用程序。我在http://delphi.about.com/cs/adptips2001/a/bltip0201_2.htm中尝试了RunDosInMemo。输出结果与命令行控制台输出不同。它总是回归:

ERROR: Can not open output file myapp.exe.

myapp.exe文件将被覆盖。

使用RunDosInMemo运行其他控制台命令按预期工作但不是Delphi tdump.exe。

为什么重定向控制台输出的任何想法都不适用于tdump?

我使用以下代码调用RunDosInMemo

RunDosInMemo('tdump.exe ' + ParamStr(0), Memo1);

2 个答案:

答案 0 :(得分:0)

ParamStr(0)返回exe的全名,包括可能包含需要引用的空格的路径。尝试:

RunDosInMemo('tdump.exe "' + ParamStr(0) + '"', Memo1);

答案 1 :(得分:0)

从'tdump'给出的错误消息可以看出,它并没有尝试读取传递给它的文件名的内容,相反,它需要输出的文件名。

'tdump'实际上期望的是从'stdin'读取文件内容。您在问题中链接的代码不合适。您需要创建至少两个管道,将输入文件的内容写入'tdump标准输入的写入端,并通过输出管道的读取端读取'tdump的输出。

但这不是必需的,你可以告诉'tdump'读取用参数传递的文件,而不是stdin。在控制台发出tdump -?并查看帮助。你会注意到这个选项:

  

-ns禁用重定向stdin的支持

您只需更改通话即可使您的程序正常运行:

 RunDosInMemo('tdump.exe -ns ' + ParamStr(0), Memo1);