Определение того, какой процесс имеет блокировку файла
У меня есть модульный тест, который хорошо работает локально, но при загрузке на сервер сборки TeamCity происходит сбой с "Процесс не может получить доступ к файлу, потому что он используется другим процессом".
- Прежде чем что-то делать в тесте, я проверяю в настройке, существует ли файл, и если так, попробуйте удалить его. Это не с тем же сообщением об ошибке, что и выше
- Когда я пишу файл, я закрываю его, а затем избавляюсь от него, который, как я считаю, должен избавиться от любых ресурсов.
Итак, у меня есть пара запросов
- У кого-нибудь были подобные проблемы и удалось их обойти
- Как можно программно узнать, какой процесс эгоистично заблокировал файл!!!
ура
3 ответа
Sysinternals FileMon имеет некоторую информацию (прокрутить вниз) о том, как они достигли этого в более старых версиях Windows.
Монитор процессов является их последней версией, но он не дает много подсказок о том, как они это делают. Тем не менее, есть несколько статей базы знаний, которые приведут вас к этой информации.
-Адам
Sysinternals handle.exe - это первый шаг. Или используйте Process Explorer's Find Handle or DLL
, Однако всегда безопаснее убить процесс, чем закрыть ручку.
Программно, это вопрос написания драйвера ядра, который читает таблицу дескрипторов Windows.
ProcessMon (для поиска) и Unlocker (по крайней мере, для разблокировки) также полезны.