子进程标准流的透明日志记录 (Windows)

Transparent logging of child process standard streams (Windows)

我想创建一个通用的日志记录应用程序 (Windows),它应该能够作为子进程执行任意可执行文件并记录特定文件的完整标准流(stdin、stdout , 标准错误).

此外,此日志记录应用程序的行为类似于一种完全透明的 "Man-in-the-Middle" 应用程序,因此对于调用原始可执行文件或包装日志记录应用程序的用户来说,没有区别。

此功能在某种程度上类似于 UNIX 命令行工具 "tee",但据我所知,不幸的是,此工具无法记录标准输入(仅支持标准输出和标准错误) .此外,我想记录更多信息,例如谁是调用父进程,时间戳...

我想将它特别用于命令提示符:"cmd.exe" 并重命名原始文件并将其替换为我自己的 "cmd.exe" 以自动获取所有输入的 (stdin) 命令的历史文件,及其输出(标准输出、标准错误)。

有人知道如何轻松实现这一点吗,或许可以使用 C# 和管道?

此致, 安德烈亚斯

一个简单的版本确实会使用管道。在本机 win32 应用程序中,您将创建一些可继承的管道并在 STARTUPINFO struct passed to CreateProcess. There is example code for this on MSDN.

中设置它们和 STARTF_USESTDHANDLES 标志

但是您不能使用它来替换 cmd.exe,因为 cmd.exe 还在交互模式下使用特殊的 Windows 控制台 API 来实现 F7历史"dialog"。您可以查看一些免费的终端替代品,例如 Console2,看看它们是如何实现的。