我正在使用 Microsoft 命令行实用程序来执行任务。我认为实用程序的具体细节及其执行的任务相对不重要。这是重要的:
命令行实用程序将文本发送到控制台窗口。我无法弄清楚如何将此文本重定向到文件,尽管我已经尝试了通过研究可以找到的所有方法。该实用程序似乎使用了一些奇怪的操作系统函数调用,导致文本以不受正常重定向方式影响的方式打印。我正在使用 Windows 7 cmd.exe 控制台窗口。
这些构造都没有重定向有问题的文本输出:
util.exe >log.txt
util.exe 2>err.txt
util.exe >log.txt 2>&1
util.exe 1>log.txt 2>err.txt
util.exe 1>log.txt 2>err.txt 3>3.txt 4>4.txt 5>5.txt 6>6.txt 7>7.txt 8>8.txt 9>9.txt
对最后一个感到困惑? Turns out there are 10 output streams in Windows-land ,但这也没有完成工作。
我可以使用控制台窗口的编辑>标记选择和复制功能复制文本,但我需要以 headless 方式捕获该程序的输出,以便它可以自动化。
我找不到任何专门绕过重定向打印到控制台的操作系统函数调用。有这样的功能吗?该实用程序如何设法规避重定向?我可以使用什么方法来捕获此实用程序的输出?
我也试过 DbgView,想也许它可能包含输出消息,但它没有。
该实用程序不是图形实用程序。它很明显是一个文本模式程序,可能是用 C 或 C++ 编写的。它是由 Microsoft 编写的。
最佳答案
没有什么特别神奇的地方。尽管 C 库默认将输出发送到标准输出句柄,但程序没有义务这样做;您始终可以打开自己的控制台输出设备句柄 (CONOUT$
)。
请参阅 CreateFile
上的文档有关控制台设备的更多信息。
在捕获输出方面,您可以使用 ReadConsoleOutput
做一些事情和 friend ,但这并不简单。
关于windows - 具有不可重定向输出的实用程序 (Windows),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/19915834/