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