0

TDUMP.exe 是 Delphi RAD Studio 的文件转储工具。如果我跑

tdump.exe myapp.exe

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

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

ERROR: Can not open output file myapp.exe.

并且 myapp.exe 文件将被覆盖。

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

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

我正在使用以下代码来调用RunDosInMemo

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

2 回答 2

0

从 'tdump' 给出的错误消息中可以明显看出,它并没有尝试读取您传递给它的文件名的内容,相反,它使用文件名进行输出。

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

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

-ns 禁用对重定向标准输入的支持

您只需要更改您的呼叫即可使您的程序正常工作:

 RunDosInMemo('tdump.exe -ns ' + ParamStr(0), Memo1);
于 2013-12-23T23:56:14.803 回答
0

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

RunDosInMemo('tdump.exe "' + ParamStr(0) + '"', Memo1);
于 2012-07-16T10:19:43.677 回答