Как определить кто заблокировал файл
Обновлено: 06.07.2024
На общедоступном сетевом ресурсе могут возникать ошибки доступа к файлам. Причиной этому является некорректно завершенная сессия пользователя, ошибки в работе ПО или просто кто-то открыл файл и не закрывает его. В такой ситуации файл оказывается заблокированным и не доступен для работы другим пользователям.
Решить проблему доступа к файлу можно путем закрытия сеансов использующих этот файл. В этой статье я расскажу как определить кто открыл файл в сетевой папке и как закрыть это подключение.
Рассмотрим два способа:
- Через оснастку "Управление компьютером" консоли управления Windows;
- При помощи утилиты командной строки - Openfiles.
1 способ. Получаем список открытых файлов с помощью оснастки "Управление компьютером".
Для получения списка открытых файлов на файловом сервере воспользуемся оснасткой консоли "Управление компьютером". Для запуска оснастки нажимаем сочетание клавиш "Win + R" и набираем название оснастки "compmgmt.msc".
В иерархии оснастки переходим /Управление компьютером/Служебные программы/Общие папки/Открытые файлы.
В правой части оснастки появится список открытых файлов. Здесь можно увидеть имя пользователя открывшего файл, количество блокировок и режим доступа к файлу.
Закрываем файл. Чтобы закрыть сетевой файл открытый другим пользователем находим его в списке и в контекстном меню выбираем пункт "Закрыть открытый файл".
2 способ. Просмотр открытых файлов через командную строку утилитой Openfiles.
Утилита Openfiles дает нам более широкие возможности по поиску и закрытию заблокированных файлов.
C помощью openfiles можно просмотреть список открытых файлов на сервере удаленно. Для этого открываем командную и запускаем утилиту с параметрами.
где
/Query - показывает все открытые файлы,
/s - определяет имя удаленного компьютера.
В случае, когда необходимо указать логин и пароль пользователя для подключения к удаленному компьютеру, задаются параметры: /u - логин пользователя, /p - пароль пользователя.
По-умолчанию список файлов показан в формате таблицы, но есть параметры позволяющие изменить формат вывода:
/fo csv - выводит список в формате csv с разделителем запятая;
/fo list - показывает открытые файлы в формате списка;
/fo table - формат таблицы.
Определяем кто открыл сетевой файл.
Чтобы найти пользователя, который открыл и заблокировал нужный нам файл запускаем Openfiles с командой find.
в команде find указан параметр /i, чтобы поиск был регистронезависимым.
После того когда мы узнали имя пользо
Закрываем заблокированный сетевой файл.
Закрыть открытый файл можно по id сессии таким способом:
Закрыть все сетевые подключения к файлам и папкам, которые открыл пользователь BadUser:
Закрыть все файлы и директории открытые в режиме чтение/запись:
Закрыть все подключения к директории с именем "c:\myshare":
Чтобы сбросить все сессии на удаленном сервере FileServer, которые открыл пользователь domain\baduser, независимо от id сессии:
Как я могу узнать, какой процесс блокирует файл или папку в Windows?
Например, при попытке удалить папку Windows сообщает об этом:
Происходит то же самое с файлом, но как мне узнать, какая программа или приложение использует его в настоящее время и не позволяет мне удалить файл или папку?
Для Windows 7, 8 и 10 вы можете использовать встроенный Resource Monitor для этого.
В случае, если это не очевидно, когда вы нашли дескриптор, вы можете определить процесс, посмотрев на столбец Image и / или PID.
Затем вы можете закрыть приложение, если вы можете это сделать, или просто щелкнуть правой кнопкой мыши по строке, и вы получите возможность убить процесс прямо здесь. Очень просто!
Microsoft/SysInternals Process Explorer - выберите "Найти"> "Найти дескриптор" или "DLL". В текстовом поле «Обрабатывать или подстрока DLL:» введите путь к файлу (например, «C:\path\to\file.txt») и нажмите "Поиск". Все процессы, которые имеют открытый дескриптор этого файла, должны быть перечислены.
WhoLockMe - расширение для проводника, которое добавляет опцию контекстного меню
NB WhoLockMe по- видимому, не работает с Win 10 ( по крайней мере , я не смог зарегистрировать его с любым из 32- или 64-разрядных версий regsvr32.exe).
Взгляните на Process Explorer ( procexp.exe ).
Из его введения:
Чтобы узнать, какой процесс использует определенный файл, выполните следующие действия:
Перейдите в Find, Find Handle или DLL .. или просто нажмите Ctrl + F.
Введите имя файла и нажмите Поиск.
Process Explorer перечислит все процессы, которые имеют дескриптор открытого файла. Нажмите на запись, чтобы сфокусировать процесс в главном окне.
При желании вы можете даже закрыть ручку вручную через нижнюю панель ( Ctrl + L ):
В команде openfiles должна быть включена поддержка локальных файлов, для этого нужно запустить openfiles /local on и перезапустить.
LockHunter может разблокировать любые обработчики, которые могли заблокировать ваши файлы или папки. В отличие от аналогичных бесплатных программ, он поддерживает как 32-разрядные, так и 64-разрядные версии Windows.
Тем не менее, UnlockIT - невероятно полезная программа, которая предоставляет базовую функциональность, которая критически отсутствует в Windows. Это один из стандартных наборов утилит, который я устанавливаю на все компьютеры с Windows, на которых работаю.
Здесь было мое открытие и решение.
Я даже пытался использовать UNLOCKER, который оказался бесполезным.
У меня проблема была с Memeo Autosync Backup
По-видимому, этот процесс резервного копирования оставляет достаточно "призрачного файла". Этот "призрачный файл" будет появляться всякий раз, когда я буду ALT-TAB на моем компьютере (Windows Professional XP), то есть я вижу, что ДВА ПРОГРАММЫ MS Excel работают, когда у меня только ОДНА видимая, на моей панели задач.
Впоследствии я продолжал видеть уведомление Memeo о "синхронизации" и выход из программы.
мы используем SVN server 1.4 (я думаю) с клиентами, являющимися либо клиентом командной строки, либо TortoiseSVN.
клиент командной строки показывает владельца блокировки с командой "svn info".
в TortoiseSVN вы можете увидеть владельца блокировки в контекстном меню " свойства "(вкладка"subversion").
использовать svn status --show-updates открыть блокировки файлов. В следующем примере Салли обнаруживает, что на изюме есть замок.формат jpg.
если вы знаете замок, вы можете использовать svn -info чтобы узнать, кто установил замок. Примечание "владелец замка" ниже:
используя функцию РЕПО-браузера TortoiseSVN есть столбец блокировки, который показывает пользователя, который заблокировал файл.
щелкните правой кнопкой мыши на локальной рабочей копии - > TortoiseSVN-> repo-browser.
шаги для проверки:
Правой Кнопкой Мыши на файл/папку, на которой вы хотите определить замком
перейдите в Параметры TortoiseSVN >> РЕПО-браузер
откроется новое окно, и вы получите представление таблицы
столбец блокировки в таблице покажет, у кого есть блокировка
- щелкните правой кнопкой мыши файл, выберите TortoiseSVN, затем проверьте наличие изменений
- нажмите Проверить репозиторий
- прокрутите вправо, чтобы увидеть колонки
следующий скрипт Python показывает все блокировки и кому они принадлежат:
У меня также была эта проблема, касающаяся .файлы aux. Решение / проблема в моем случае заключалась в том, что никакие подкаталоги не имеют большей глубины, чем 1. Если вы хотите использовать это, подкаталоги в папке tmp должны существовать. например. -- >src - > введение- > введение.текс требует -- >tmp-- > введение-->введение.вспомогательный ******
подчеркнутый каталог должен существовать. Так что в случае управления subversion также фиксирует структуру каталогов в папке tmp (без *.aux) файлы.
Вот проблема: сетевой ресурс находится на NAS, поэтому я не могу войти в систему. Мне нужен инструмент, чтобы узнать удаленно, кто блокирует файл. Невозможно перезагрузить NAS каждый раз, потому что есть несколько пользователей.
Handle.exe, Process Explorer и PsFile, по-видимому, ограничены файлами на локальной машине, поэтому они не работают для меня.
На всякий случай кто-то ищет решение для системы на базе Windows или NAS:
В Windows есть встроенная функция, которая показывает, какие файлы на локальном компьютере открыты/заблокированы удаленным компьютером (который имеет файл, открытый через общий ресурс файла):
Там вы можете даже сильно закрыть файл.
На серверах Windows 2008 R2 у вас есть два способа просмотра файлов, открытых и закрывающих эти соединения.
Управление доступом и хранением
Диспетчер серверов > Роли > Файловые службы > Управление общим хранилищем и хранилищем > щелкните правой кнопкой мыши на SaSM > Управление файлом Open
Через OpenFiles
CMD > Openfiles.exe/query/s SERVERNAME
PsFile работает на удаленных компьютерах. Если моя учетная запись уже имеет доступ к удаленному общему ресурсу, я могу просто ввести:
Это довольно сложно, так как в моем случае этот удаленный общий ресурс монтируется как Z: на моем локальном компьютере, но psfile идентифицирует пути, как они определены на удаленном файловом сервере, что в моем случае я: (ваш будет будь другим). Мне просто пришлось расчесывать результаты моего первого запуска psfile, чтобы увидеть некоторые из путей, которые он вернул, а затем запустить снова с частичным путем, чтобы сузить результаты.
Опционально PsFile позволит вам указать учетные данные для удаленного доступа, если вам нужно предоставить их для доступа.
Наконец, небольшой совет: если кто-то нажимает на файл в Проводнике Windows и разрезает или копирует файл с намерением вставить его в другое место, это действие также блокирует файл.
Это может быть особенно полезно при использовании общей базы данных MS Access.
Частичный ответ: с помощью Process Explorer вы можете просматривать дескрипторы сетевого ресурса , открытого с вашего компьютера.
Читайте также: