Короткий ответ на этот вопрос - нет.
Однако длинный ответ заключается в том, что существуют различные вызовы API и методы WMI, которые можно использовать для поиска этой информации, но не ожидайте, что она будет быстрой и простой.
Если вы хотите использовать вызовы API, взгляните на функцию NtQuerySystemInformation с параметром SYSTEM_PROCESS_INFORMATION. Это один из тех замечательных «недокументированных» методов, которые идут с замечательным отказом от ответственности:
NtQuerySystemInformation может быть
изменен или недоступен в будущем
версии Windows. Приложения
следует использовать альтернативные функции
перечислены в этой теме.
Так что я бы посоветовал избегать этого в пользу использования WMI.
Вы можете использовать класс WMI Win32_Process , чтобы перечислить все процессы, запущенные в данный момент на компьютере, а затем перечислить все дескрипторы, которые каждый процесс удерживает, пока не найдете нужный файл. К сожалению, не существует простого способа сказать «эй, какой процесс блокирует этот файл», он работает только наоборот: вам нужно искать вниз по списку процессов, пока не найдете тот, который блокирует интересующий вас файл.
Я бы порекомендовал хорошую небольшую статью о CodeProject под названием Как: (почти) все в WMI через C # Часть 2: Процессы . (Часть 1 также хорошо читается, если вам нравятся такие вещи)