Вопрос

Есть ли способ в .Net точно узнать, какой процесс заблокировал файл?

Редактировать:Я делаю это, потому что хочу сообщить своему пользователю, что они не могут изменить / открыть файл, потому что в данный момент он открыт в другой программе, которую они используют (например, Excel).Надеюсь, это поможет.

Это было полезно?

Решение

Короткий ответ на этот вопрос - нет.

Однако длинный ответ заключается в том, что существуют различные вызовы API и методы WMI, которые вы можете использовать для получения этой информации, но не ожидайте, что это будет быстро и просто.

Если вы хотите использовать вызовы API, взгляните на ntquerysystemинформация функция с параметром SYSTEM_PROCESS_INFORMATION.Это один из тех прекрасных "недокументированных" методов, который поставляется с замечательным отказом от ответственности:

NtQuerySystemInformation может быть изменены или недоступны в будущем версий Windows.Приложения следует использовать альтернативные функции , перечисленные в этом разделе.

Поэтому я бы предложил избежать этого в пользу использования WMI.

Вы можете использовать WMI win32_process_процесс класс для перечисления всех процессов, запущенных в данный момент на компьютере, а затем перечисления всех дескрипторов, которые удерживает каждый процесс, пока вы не найдете искомый файл.К сожалению, нет простого способа спросить "эй, какой процесс блокирует этот файл", это работает только наоборот, вам нужно выполнить поиск по списку процессов, пока вы не найдете тот, который блокирует интересующий вас файл.

Я бы порекомендовал милую небольшую статью о CodeProject под названием Как сделать:(Почти) Все в WMI через C #, часть 2:Процессы.(Часть 1 также стоит почитать, если вам нравятся подобные вещи)

Другие советы

Что ж...это не совсем .NET-способ сделать это...но если предположить, что вы просто хотите выяснить это с помощью простой утилиты, ознакомьтесь Дескриптор из SysInternals.

Похоже, кто-то разобрался в этом (и вы, возможно, также немного подучите французский :))

http://www.axcis.com.au/bb/viewtopic.php?p=505

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top