Есть несколько потоков на SO, которые описывают, как проверить, какое приложение создает файл с такими инструментами, как монитор процессов Sysinternals. Что-то вроде этого возможно программно из .net?Как программно определить, какой процесс создал файл в .net?
фон: Моя программа должна дистанционно управлять собственным приложением третьей стороны, используя его интерфейс автоматизации, и одна из функций, мне нужно из этого приложения есть ошибка, где он создает кучу временных файлов в %TEMP%
, которые называются tmpXXXX.tmp
(то же, что и .net Path.GetTempFileName()
), но не удаляет их. Это приводит к тому, что накопитель C становится полным с течением времени, что в конечном итоге приводит к отказу приложения. Я уже подал ошибку производителю, но пока нам нужно временное обходное решение, поэтому я подумал о том, чтобы поставить FileSystemWatcher
на %TEMP%
, который смотрит tmp*.tmp
, собирает эти файлы и после завершения операции над сторонним приложением удаляет их. Но это рискованно, так как другое приложение может также записывать файлы с одинаковым шаблоном имени файла в %TEMP%
, поэтому я хочу только удалить те, которые были созданы NastyBuggyThirdPartyApplication.exe
.
Это так или иначе возможно?
Я знаю, как вы можете определить, какой файл открыт, но нет, если его сейчас закрыто ...... – BugFinder
Возможный wrokaround: Если вы можете запустить программу под пользовательской учетной записью пользователя, то вы можете просто проверить владельца файлов. – HugoRune
В файле, который содержит информацию, которую вы ищете, нет ничего. Вы либо должны «быть там», когда файл создается, и отслеживать соответствующее приложение (ы), или вам нужно прибегнуть к обману, например, к вышеупомянутой учетной записи пользователя. –