Посмотрите, какие процессы заблокированы в C#

В старых версиях Windows было невозможно определить, какие процессы заблокировали файл. Система отслеживала количество блокировок в файле, и процессы отвечали за увеличение и уменьшение счета для представления своих собственных блокировок.

Недавно (я думаю, начиная с Windows XP). Windows включила новый диспетчер перезагрузки, чтобы помочь в перезапуске системы во время установки. Чтобы упростить перезагрузку, Windows теперь отслеживает процессы, которые заблокировали файл, и вы можете использовать Restart Manager для чтения этого списка процессов.

У .NET Framework нет каких-либо инструментов для работы с Restart Manager, поэтому вам необходимо использовать его API, и для этого требуются обычные уродливые объявления. Загрузите пример, чтобы увидеть их всех в полной мере.

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

Сначала метод создает новый сеанс диспетчера перезагрузки. Затем он создает пустой список для хранения объектов Process и вводит блок try-catch.

Затем метод вызывает метод RmRegisterResources для регистрации имени файла с помощью Restart Manager. Затем он вызывает метод RmGetList, чтобы узнать, сколько процессов имеет блокировки в файле. Он вызывает RmGetList снова, чтобы получить информацию о процессах. Затем код затем просматривает результаты и использует возвращенные идентификаторы процессов для получения объектов Process, представляющих объекты, у которых файл заблокирован.

Метод завершается возвратом списка объектов Process.

Загрузите пример, чтобы увидеть более подробную информацию. Этот пример был основан на сообщении MSDN, Как узнать процесс блокировки файла . Дополнительную информацию см. В этом сообщении.

Чтобы протестировать программу, запустите ее, а затем откройте исполняемый файл в Microsoft Word. (Это будет выглядеть как тарабарщина в Word.) Затем нажмите кнопку «Найти замки» программы. Вы должны увидеть процессы с именем howto_find_file_locker.vshost (Visual Studio, запускающие программу) и WINWORD.

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

Источник: http://csharphelper.com/blog/2017/01/see-processes-file-locked-c/

1 Звезда2 Звезды3 Звезды4 Звезды5 Звезд (Пока оценок нет)

Add a Comment

Ваш e-mail не будет опубликован. Обязательные поля помечены *