Определение того, какой процесс имеет блокировку файла

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

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

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

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

ура

3 ответа

Решение

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

Монитор процессов является их последней версией, но он не дает много подсказок о том, как они это делают. Тем не менее, есть несколько статей базы знаний, которые приведут вас к этой информации.

-Адам

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

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

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

Другие вопросы по тегам