C# - 如何监控进程的文件读/写操作?

标签 c# file-io monitoring

我认为这可能是一个常见问题,但很难找到答案。我试过在这里和其他论坛搜索,但没有成功。

我正在编写一个 C#(.net 版本 4)程序来监视进程。它已经在进程启动和停止时引发了一个事件,但我还需要检查这个进程在哪里读取和写入;特意写信给因为我知道这个进程每次运行都会写入大量数据。我们处理批处理数据,进程写入的路径包含Batch ID,这是记录进程结果的重要信息。

我研究了 System.Diagnostics.Process.BeginOutputReadLine 方法,但由于文档中说必须重定向 StandardOutput,所以我不确定这是否可以在当前正在运行的进程上完成,或者是否可以影响进程最初打算的写操作。

它是 C# 中的控制台应用程序。如果有人对如何执行此操作有任何想法,将不胜感激。

提前致谢!

最佳答案

输出重定向只能帮你解决拦截进程标准输出流的问题。这对程序将使用的其他文件或流的读/写操作没有影响。

最简单的方法是避免对这些信息进行逆向工程,并对进程写入数据的位置施加一些控制(例如,将命令行参数传递给它以指定输出路径,您可以自己监视该输出路径).

如果由于某种原因无法做到这一点,您可以研究这些方法,所有这些方法都非常先进并且有各种缺点:

  • 使用Detours启动进程并将调用重定向到 CreateFile到您定义的函数(例如,您可以调用其他函数来跟踪它使用的文件名,然后调用真正的 CreateFile)。请注意,使用 Detours 的许可证需要付费,并且需要您构建一个非托管 DLL 来定义您的替换函数。
  • Microsoft-Windows-Kernel-File 事件跟踪提供程序读取数据。该提供程序跟踪系统上所有内容的所有 文件操作。使用此数据需要高级知识 ETW如果您尝试从 C# 中使用它,还有很多 P/Invoke 调用。
  • 在进程启动后枚举进程的打开句柄。 previous stackoverflow.com question有几种可能的解决方案。请注意,这并非万无一失,因为它只会为您提供某个时间点的事件快照(例如,该过程可能打开和关闭句柄的速度太快,以至于您无法在调用之间观察它以枚举它们)并且大多数答案都需要调用进入未记录的功能。

关于C# - 如何监控进程的文件读/写操作?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8046788/

相关文章:

c# - 在不使用错误处理的情况下监视 c# web 服务的状态

c# - 捕获唯一键违规的通用方法

c# - 当 OS 为非英文时,GetSystemTimeZone 为英文

c# - 如何将子元素作为解码字符串添加到 XElement?

javascript - 如何在ajax中构建字符串数组并将其传递给asp?

c++ - fstream 和 eof() 的问题(总共花了 5 个小时进行调试、搜索解决方案和测试)

c# - 我可以强制 Windows 挑战用户进行身份验证吗?

user-interface - Oracle 11g 实时监控工具

c# - 使用 C++ 或 C# 打开之前的全局检测文件信息

file-io - 来自 [] 字节或文件的 io.WriteSeeker 和 io.ReadSeeker