【发布时间】:2016-08-19 16:59:20
【问题描述】:
SO 上有几个线程描述了如何使用 Sysinternals 进程监视器等工具检查哪个应用程序创建了文件。像这样的东西是否可以通过 .net 以编程方式实现?
背景:我的程序必须使用其自动化接口远程控制专有的第三方应用程序,而我需要从该应用程序中获得的功能之一有一个错误,它会在 %TEMP% 中创建一堆临时文件,这些文件被称为tmpXXXX.tmp(与 .net 的 Path.GetTempFileName() 相同)但不会删除它们。这会导致 C 驱动器随着时间的推移变满,最终导致应用程序失败。我已经向制造商提交了一个错误,但我们暂时需要一个临时解决方法,所以我想在%TEMP% 上放置一个FileSystemWatcher 来监视tmp*.tmp,收集这些文件,然后在第三个操作之后-party应用程序完成,删除它们。但这是有风险的,因为另一个应用程序也可能将具有相同文件名模式的文件写入%TEMP%,所以我只想删除由NastyBuggyThirdPartyApplication.exe 创建的文件。
这有可能吗?
【问题讨论】:
-
我知道你怎么知道哪个文件打开了 - 但如果它现在关闭了......
-
可能的解决方法:如果您可以在自定义用户帐户下运行程序,那么您只需检查文件的所有者
-
在包含您正在寻找的信息的文件中没有任何内在的东西。您要么必须在创建文件时“在场”并监控有问题的应用程序,要么必须求助于上述用户帐户等诡计。
-
查看类似:stackoverflow.com/questions/428774/…,您可以使用进程监视器,为您想要的目录和进程设置过滤器。然后使用命令行导出日志并处理文件列表。
标签: c# .net filesystemwatcher