Как узнать какая программа использует файл
Как я могу узнать, какой процесс блокирует файл или папку в Windows?
Например, при попытке удалить папку Windows сообщает об этом:
Действие не может быть завершено, потому что папка открыта в другой программе
Происходит то же самое с файлом, но как мне узнать, какая программа или приложение использует его в настоящее время и не позволяет мне удалить файл или папку?
Для Windows 7, 8 и 10 вы можете использовать встроенный Resource Monitor для этого.
- Откройте Resource Monitor, который можно найти
- С помощью поиска resmon.exe в меню «Пуск» или
- Как кнопка на вкладке « Производительность » в вашем диспетчере задач
- Откройте вкладку CPU и используйте поле поиска в разделе Associated Handles.
- Помечено синей стрелкой на снимке экрана ниже
В случае, если это не очевидно, когда вы нашли дескриптор, вы можете определить процесс, посмотрев на столбец 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.
- Показывает процессы, блокирующие файл или папку
- Позволяет разблокировать, удалить, скопировать или переименовать заблокированный файл
- Позволяет убить процесс блокировки
- Позволяет удалить процессы блокировки с жесткого диска
- Интегрируется в меню Проводника
- Он удаляет файлы в корзину, поэтому вы можете восстановить их, если удалили по ошибке
- Поддерживает как 32, так и 64-битную Windows
Тем не менее, UnlockIT - невероятно полезная программа, которая предоставляет базовую функциональность, которая критически отсутствует в Windows. Это один из стандартных наборов утилит, который я устанавливаю на все компьютеры с Windows, на которых работаю.
Здесь было мое открытие и решение.
Я даже пытался использовать UNLOCKER, который оказался бесполезным.
У меня проблема была с Memeo Autosync Backup
По-видимому, этот процесс резервного копирования оставляет достаточно "призрачного файла". Этот "призрачный файл" будет появляться всякий раз, когда я буду ALT-TAB на моем компьютере (Windows Professional XP), то есть я вижу, что ДВА ПРОГРАММЫ MS Excel работают, когда у меня только ОДНА видимая, на моей панели задач.
невозможно удалить (файл LARGE.xls): он используется другим человеком или программой. Закройте все программы, которые могут использовать этот файл, и повторите попытку.
Впоследствии я продолжал видеть уведомление Memeo о "синхронизации" и выход из программы.
Как я могу узнать, какой процесс блокирует файл или папку в Windows? Например, при попытке удалить папку Windows сообщает следующее:
Операция не может быть завершена, так как эти папка или файл открыты в другой программе. Закройте папку или файл и повторите попытку.
Такая же ошибка может возникнуть при переименовании или удаления как папки, так и файла. Но как узнать, какая программа или приложение в настоящее время использует его и не позволяет удалить файл или папку?
Имеется сразу несколько способов и программ чтобы найти процессы и программы, которые открыли файл.
1. Монитор ресурсов
Для поиска программы или процесса, открывшей файл, вы можете использовать Монитор ресурсов (Resource Monitor), который встроен в Windows 7, 8 и 10.
Откройте Монитор ресурсов, это можно сделать несколькими способами:
- В поле для поиска введите «Монитор ресурсов» или resmon.exe:
- Или в Диспетчере задач перейдите на вкладку «Производительность» и найдите кнопку «Открыть монитор ресурсов»:
В Мониторе ресурсов перейдите на вкладку ЦП (CPU). Используйте поле поиска в разделе «Связанные дескрипторы»
В результатах поиска в столбце «Образ» вы увидите, какая программа запустила процесс, блокирующий файл.
Здесь же вы можете кликнуть правой кнопкой мыши по любому найденному процессу и нажать «Завершить процесс», чтобы закрыть программу, блокирующую файл.
2. Process Explorer
Перейдите в Find → Handle or DLL.
В текстовом поле "Handle or DLL substring:" введите путь до файла или папки. Будут показаны все процессы, которые имеют открытый обработчик на этот файл.
3. OpenedFilesView
OpenedFilesView это бесплатная программа не требующая установки, она покажет все открытые файлы, имеется возможность искать по имени или пути файла:
4. LockHunter
LockHunter — это надёжная программа для разблокировки файлов.
Это бесплатный инструмент для удаления файлов, заблокированных неизвестным процессом. LockHunter полезен для борьбы с вредоносными программами и другими программами, которые блокируют файлы без причины. В отличие от других подобных инструментов, он удаляет файлы в корзину, поэтому вы можете восстановить их, если удалили по ошибке.
Н аверное, каждому из пользователей Windows хотя бы раз приходилось иметь дело с так называемыми неудаляемыми файлами и папками. Как правило, причиной невозможности удалить, переместить или хотя бы переименовать такой объект является использование его каким-то процессом, причём необязательно чтобы этот процесс был системным. Это может быть антивирус, архиватор или какой-нибудь редактор.
Обычно в окне с ошибкой прямо указывается, что за процесс препятствует дальнейшим действиям с объектом, но бывает и так, что вместо этого сообщается, что файл или папка открыты в другой программе. Это понятно, но вот в какой именно?
Так вот, определить её очень просто. Во всех популярных версиях Windows (начиная с 7) есть такая встроенная утилита как «Монитор ресурсов», предназначающаяся для контроля использования программных и аппаратных ресурсов. В её поле зрения попадают все процессы, в том числе и зависшие. Она то как раз и подскажет, что именно держит файл или папку.
Нажмите сочетание клавиш Win + R и выполните в открывшемся окошке команду resmon .
Откроется окно монитора ресурсов. Переключитесь в нём на вкладку «ЦП» и введите в поле «Поиск дескрипторов» название объекта, при удалении, перемещении или переименовании которого возникла ошибка. Результаты отобразятся тут же, чуть ниже. В нашем примере удалению папки «Всякая всячина» препятствовал архиватор WinRAR , но в самом окне с описанием ошибки об этом ничего не говорилось.
Вот так всё просто. Кстати, если удерживающий процесс не является критическим, его можно завершить прямо из окна монитора ресурсов.
После этого проблемный файл, папка или другой объект легко смогут быть удалены обычным способом.
П рограммы, способные соединяться с интернетом при подключении к сети используют так называемые порты — цифровые адреса сетевых устройств. Иногда при тонкой настройке программ или устройств возникает необходимость узнать, какое приложение занимает тот или иной порт, например с целью освободить его для другой программы. В Windows сделать это очень просто. Основных вариантов два: с помощью обычной командной строки и с помощью сторонних утилит.
В командной строке
Для отображения текущих соединений TCP/IP в Windows используется штатная консольная утилита netstat. Она может принимать более 10 параметров, но для того чтобы узнать какой порт занят каким процессом, вполне хватит трех: -a, -o и –n. Для начала необходимо получить список всех текущих соединений. От имени администратора откройте консоль CMD и выполните эту команду:
Данные будут выведены в пять колонок: имя, локальный адрес, внешний адрес, состояние и идентификатор процесса (PID). Отыщите нужный вам порт и посмотрите, с каким PID он связан. Теперь откройте Диспетчер задач, переключитесь на вкладку «Процессы» (в Windows 7) или «Подробности» (в Windows 8.1) и найдите в списке этот PID. А найдя его, вы идентифицируете и процесс.
Примечание: если в Диспетчере задач у вас не отображается ИД процесса, включите его через меню «Вид» -> «Выбрать столбцы».
В утилите CurPorts
Второй способ более прост, но для определения занимающего порт процесса вам понадобится сторонняя утилита CurPorts. Она бесплатна, проста и не требует установки.
Если её запустить, в окошко будут выведены не только порты и связанные с ним процессы и сервисы, но и пути к исполняемым файлам, их описания, версии, данные о разработчике и много другой полезной информации.
Администраторы файловых серверов Windows часто сталкиваются с необходимостью принудительного закрытия файлов, открытых пользователями. Такая задача возникает при одновременной работы с одним файлом нескольких пользователей. Часто при некорректной работе ПО или неправильном завершении сессии пользователем, файлы в сетевой папке оказываются открытыми и заблокированными, и остальные пользователи не могут вносить в него изменения. В этой статье мы покажем, как получить список открытых файлов на файловом сервере, узнать какие пользователи их используют, и способы сброса этих файловых сессий.
Вывести список открытых файлов на файловом сервере Windows
Список открытых пользователями файлов на файловом сервере Windows можно получить с помощью стандартной графической консоли Computer Management (Управление компьютером — compmgmt.msc ).
Запустите на файловом сервере консоль Computer Management (или подключитесь к нему удаленно консолью со своего компьютера) и перейдите в секцию System Tools -> Shared Folders -> Open files (Служебные программы -> Общие папки -> Открыты файлы). В правой части окна отображается список файлов сервера, открытых удаленно . Список содержит локальный путь к файлу, имя учетной записи пользователя, количество блокировок и режим, в котором открыт файл (Read или Write+Read).
Этот же список открытых файлов можно получит с помощью встроенной консольной утилиты Openfiles . Например, с помощью следующей команды можно получить id сессии, имя пользователя и полный локальный путь к открытому файлу:
Openfiles /Query /fo csv |more
При удаленном доступе пользователя к папке или файлу в сетевой папке (SMB) на сервере, для пользователя создается новая сессия, определяющая данное подключение. Управление подключениями пользователей осуществляется именно через эти идентификаторы сессий.
Эту же команду можно выполнить удаленно, например, нужен список открытых файлов на файловом сервере mskfs01:
Openfiles /Query /s mskfs01 /fo csv
У команды Openfiles есть еще одна интересная возможность просмотра списка локально открытых файлов. Для ее использования нужно включить опцию Maintain Objects List (Построение списка объектов) командой openfiles /local on и перезагрузить сервер. После этого в список начнут попадать файлы, открытые локальными процессами (этот режим желательно использовать только для отладки, т.к. может негативно сказаться на производительности сервера).
Как определить какой пользователь открыл файл
Чтобы определить пользователя, который открыл (заблокировал) файл cons.adm на сервере, выполните команду:
Openfiles /Query /s mskfs01 /fo csv | find /i "cons.adm"
Ключ /i используется, чтобы выполнялся регистронезависимый поиск
Естественно, можно указать только часть имени файла. К примеру, нам нужно узнать кто открыл xlsx файл, в имени которого есть строка farm, воспользуемся таким конвейером:
Openfiles /Query /s mskfs01 /fo csv | find /i "farm"| find /i "xlsx"
Можно, конечно найти файл и в графической консоли Computer Management, но это менее удобно (консоль не предусматривает возможность поиска).
Как закрыть открытый файл
Чтобы закрыть открытый файл, нужно найти его в списке файлов секции Open File и в контекстном меню выбрать пункт « Close Open File ».
Если на файловом сервере сотни открытых файлов, найти их в консоли будет непросто. Удобнее воспользоваться утилитой Openfiles . Как мы уже говорили, она возвращает ID сессии открытого файла. Именно по этому ID сессии, файл можно принудительно закрыть, сбросив подключение. Находим ID нужного файла:
Openfiles /Query /s mskfs01 /fo csv | find /i "farm"| find /i ".xlsx"
Отключаем от него пользователя по полученному идентфикатору:
Openfiles /Disconnect /s mskfs01 /ID 67109098
Как удаленно закрыть открытые файлы с помощью PowerShell
В Windows Server 2012 / Windows 8 в PowerShell появились командлеты для работы с шарами и файлами на SMB сервере. Данные командлеты можно использовать для удаленного сброса подключений к открытому файлу.
Список открытых файлов можно получить с помощью командлетов Get- SMBOpenFile , а закрыть файл (сбросить подключение) с помощью Close-SmbOpenFile .
Итак, подключаемся к удаленному серверу:
$sessn = New-CIMSession –Computername mskfs01
Находим и закрываем открытый файл pubs.docx одной командой:
Get-SMBOpenFile -CIMSession $sessn | where | Close-SMBOpenFile -CIMSession $sessn
Подтверждаем закрытие файла, нажав Y.
Чтобы убрать подтверждение принудительного закрытия файла на сервере, используйте ключ -Force
Эти же команды можно использовать, к примеру, чтобы закрыть все файлы, открытые некоторым пользователем (пользователь ушел домой и не освободил файлы). К примеру, чтобы сбросить все файловые сессии для пользователя ipivanov, выполните
Get-SMBOpenFile -CIMSession $sessn | where |Close-SMBOpenFile -CIMSession $sessn
Читайте также: