我认为这可能是一个常见问题,但很难找到答案。我试过这里和其他论坛没有运气。
我正在编写一个C#(。net version 4)程序来监控进程。它已经在进程启动和停止时引发了一个事件,但我还需要检查这个进程从哪里读取和写入;特别写,因为我知道这个过程每次运行时都会写入大量数据。我们处理批量数据,并且进程写入的路径包含批处理ID,这是记录进程结果的重要信息。
我查看了System.Diagnostics.Process.BeginOutputReadLine方法,但由于文档说必须重定向StandardOutput,我不确定是否可以对当前正在运行的进程执行此操作,或者是否影响最初由进程预期的写操作。
它是C#中的控制台应用程序。如果有人知道如何做到这一点,将不胜感激。
提前致谢!
答案 0 :(得分:1)
输出重定向只能帮助您解决拦截进程标准输出流的问题。这对程序将使用的其他文件或流的读/写操作没有影响。
最简单的方法是避免对此信息进行逆向工程,并对进程写入数据的位置施加一些控制(例如,将命令行参数传递给它以指定输出路径,并且您可以自己监视该输出路径)。
如果由于某种原因这是不可能的,你可以研究这些方法,所有方法都非常先进并且有各种缺点:
CreateFile
)。请注意,使用Detours的许可证需要花钱,它需要您构建一个非托管DLL来定义您的替换功能。Microsoft-Windows-Kernel-File
事件跟踪提供程序中读取数据。此提供程序跟踪系统上所有内容的所有文件操作。如果您尝试从C#中使用此数据,则需要使用此ETW和许多P / Invoke调用的高级知识。答案 1 :(得分:0)
我最近遇到了这个实现:DetectOpenFiles但我没有使用和/或测试它。随意试试吧。它似乎为给定的进程ID提供打开的文件句柄信息。期待阅读您的体验! ; - )