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

时间:2017-05-22 20:12:07

标签: windows logging stdout stdin stderr

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

此外,这个日志记录应用程序应该像一个“中间人”#34;应用程序完全透明,因此对于正在调用原始可执行文件或包装器日志记录应用程序的用户来说,没有区别。

此功能在某种程度上类似于UNIX命令行工具" tee",但据我所知,此工具很遗憾无法记录stdin(仅支持stdout和stderr) )。另外,我想记录更多信息,例如谁是调用父进程,时间戳......

我想特别在命令提示符下使用它:" cmd.exe"并重命名原始文件并将其替换为我自己的" cmd.exe"自动获取所有输入(stdin)命令的历史文件及其输出(stdout,stderr)。

是否有人知道如何轻松实现这一点,可能使用C#和管道?

最诚挚的问候, 安德烈亚斯

1 个答案:

答案 0 :(得分:1)

简单版本确实会使用管道。在本机win32应用程序中,您将创建一些可继承的管道并设置它们,STARTUPINFO结构中的STARTF_USESTDHANDLES标志传递给CreateProcess。这个on MSDN有示例代码。

但是,您无法使用此替换cmd.exe,因为cmd.exe还在交互模式下使用特殊的Windows控制台API来实现 F7 history“对话框”等功能。您可以查看一些免费终端替换,如Console2,看看他们是如何做到的。