Файл, заблокированный, который процесс?

Существует ли путь в .NET для обнаружения точно, какой процесс заблокировал файл?

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

10
задан Jon Seigel 28 March 2010 в 22:19
поделиться

3 ответа

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

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

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

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

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

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

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

6
ответ дан 4 December 2019 в 02:50
поделиться

Ну ... это не совсем способ .NET ... но если вы просто хотите выяснить это с помощью простой утилиты, посмотрите Handle из SysInternals .

1
ответ дан 4 December 2019 в 02:50
поделиться

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

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

0
ответ дан 4 December 2019 в 02:50
поделиться
Другие вопросы по тегам:

Похожие вопросы: