Определение процесса блокировки файла

У меня есть unit test, который отлично работает локально, но при загрузке на сервер сборки TeamCity завершается сбой: "Процесс не может получить доступ к файлу, потому что он используется другим процессом".

  • Прежде чем я что-нибудь сделаю в тесте Я проверяю установку, если файл существует, и если да, попробуйте удалить его. Это происходит с той же ошибкой как указано выше
  • При использовании файл, я закрываю распоряжаться им, которые, я считаю, должны избавиться от любых ресурсов.

Итак, у меня есть несколько запросов

  • У кого-то были подобные проблемы и удалось обойти их.
  • Как узнать, что процесс эгоистично заблокировал файл!!!

Приветствия

Ответ 1

Sysinternals FileMon содержит некоторую информацию (прокрутка вниз) о том, как они это сделали в более старых версиях Windows.

Process monitor - это их последняя версия, но она не дает много подсказок о том, как они это делают. Однако есть некоторые статьи базы знаний, которые должны привести вас к этой информации.

-Adam

Ответ 2

Sysinternals handle.exe - это первый шаг. Или используйте Process Explorer Find Handle or DLL. Это всегда безопаснее убить процесс, чем закрыть дескриптор.

Программно, это вопрос написания драйвера ядра, который читает таблицу дескрипторов Windows.

Ответ 3

ProcessMon (для поиска) и Unlocker (по крайней мере, для разблокировки) также полезны.