Как да идентифицирате процеса, който е заключил файл в Windows

Когато се опитате да изтриете файл или папка, която се използва от процес, се появява диалоговият прозорец File In Use, показващ името на програмата, която е заключила файла.

Има обаче случаи, в които диалоговият прозорец „Файл в употреба“ не показва името на процеса, който има заключване на файла, който се опитвате да изтриете. В някои случаи диалоговият прозорец ще покаже „действието не може да бъде завършено, защото файлът е отворен в друг процес“.

Намерете кой процес е заключил файл

За разследване на процеси и заключени файлове Windows Sysinternals Process Explorer е може би първата опция, която идва на ум на повечето потребители. Има обаче две вградени решения за показване на текущия списък с отворени файлове заедно със съответните имена на процеси.

Намерете кой процес е заключил файл, като използвате:

  1. Монитор на ресурси (resmon.exe)
  2. Process Explorer от Microsoft Sysinternals
  3. Дръжка от Microsoft Sysinternals
    • Намерете манипулатора на файла чрез менюто с десен бутон
  4. Openfiles.exe вграден инструмент за конзола
    • Активиране на проследяване на локални файлови манипулатори
    • Вижте отворените файлове и съответните имена на процеси
    • Прекъснете връзката на файловете, отворени от споделени папки
  5. OpenedFilesView от Nirsoft.net (трета страна)

1. Монитор на ресурсите

Монитор на ресурси (resmon.exe) е вграден инструмент, който има много полезни функции. С Resource Monitor можете проследяване на текущото използване на мрежата и интернет, преглед на свързаните манипулатори за заключени файлове, както и да управлявате процесите точно както бихте използвали диспечера на задачите.

За да намерите името на процеса, който има заключен файл, щракнете върху раздела CPU, въведете името на файла или част от него в текстовото поле Асоциирани дръжки.

Намерете кой процес е заключил файл

По-рано разгледахме Resource Monitor. Вижте тези статии:

  • Как да използвате монитора на ресурсите, за да намерите кой процес е заключил файл?
  • Коя програма използва цялата ви интернет честотна лента? Използвайте Монитор на ресурси, за да го намерите

2. Process Explorer

Process Explorer няма нужда от представяне. В Process Explorer всичко, което трябва да направите, е да използвате функцията Find и да въведете името на файла. Това показва процеса, който осъществява достъп до файла.

Намерете кой процес е заключил файл

От изгледа на долния панел можете да затворите манипулатора на файла, ако е необходимо.

Трябва да стартирате Process Explorer като администратор, за да управлявате процеси, които се изпълняват с повишени стойности. За да повишите Process Explorer, щракнете върху менюто Файл → Показване на подробности за всички процеси.

Вижте тези статии, свързани с Process Explorer:

  • Как да изтриете упорит неизтриваем файл или папка в Windows?
  • Намерете коя програма използва вашата уеб камера в момента
  • Как да разберете коя програма е причинила неизвестно съобщение за грешка?
  • Какво означава неуспешно изброяване на обекти в контейнера?

3. Дръжка от Windows Sysinternals

Дръжка е помощна програма от Microsoft Sysinternals, която показва информация за отворени манипулатори за всеки процес в системата. Можете да го използвате, за да видите програмите, които имат отворен файл, или да видите типовете обекти и имената на всички манипулатори на програма. Handle е като версия на командния ред на Process Explorer.

Забележка: Дръжката v4.21 има a малък бъг където винаги съобщава „Няма намерени съответстващи манипулатори“, ако буквата на устройството е с главни букви. Надяваме се Microsoft да го поправи в следващата актуализация.

От ан администраторски команден ред прозорец, използвайте синтаксиса на командния ред, за да намерите процеса, който отваря файла:

handle.exe -a -u име на файл_с_път

Ако името на файла съдържа интервали, оградете го в двойни кавички.

пример:

handle.exe -a -u "c:\users\ramesh\desktop\Mandate-form.pdf"
намерете кой процес е заключен файл - Sysinternals обработват

(Споменаването на името на файла без пътя може да не работи непременно във всяка ситуация. Препоръчително е винаги да включвате пълния път.)

Резултатът показва името на процеса, идентификатора на процеса, потребителското име, името на заключения (целевия) файл с пътя.

Манипулатор на Sysinternals: Аргументи на командния ред

употреба: дръжка [[-a [-l]] [-u] | [-c [-y]] | [-s]] [-p |] [име] [-nobanner]
Изхвърлете цялата информация за манипулатора.
Просто покажете манипулаторите на секции, подкрепени с файл на страница.
-° С Затваря посочения манипулатор (интерпретиран като шестнадесетично число).
Трябва да посочите процеса чрез неговия PID.ПРЕДУПРЕЖДЕНИЕ: Затварянето на манипулатори може да причини нестабилност на приложението или системата.
Не подканвайте за потвърждение за затваряне.
Брой за печат на всеки тип отворена дръжка.
-u Показване на потребителското име на собственика, когато търсите дръжки.
-стр Манипулатори за изхвърляне, принадлежащи на процес (приема се частично име).
име Търсене на манипулатори на обекти с (фрагментът е приет).
-нобанер Не показвайте стартовия банер и съобщението за авторски права.

Никакви аргументи няма да изхвърлят всички препратки към файлове.

Добавете Sysinternals Handle към менюто с десен бутон

Можете да добавите Sysinternals Handle към менюто с десен бутон за файлове, за да намерите бързо програмата, която е заключила файла. За да го добавите към контекстното меню, изпълнете следните стъпки:

  1. Изтегли Дръжка от сайта на Microsoft Sysinternals.
  2. Копирайте файловете handle.exe & handle64.exe към папка – напр. г:\инструменти
  3. Копирайте следните редове код в Notepad и запазете файла като find_handle.vbs на постоянно място.
    „Изпълнява помощната програма Sysinternals Handle.exe с аргумент за име на файл. '© Рамеш Шринивасан -- https://winhelponline.com/blog. 'Дата на създаване: 29 март 2008 г. „Дата на актуализиране: 11 юни 2019 г. „За всички версии на Windows, включително Windows 10 Option Explicit. Dim objShell, WshShell, objFSO, sBaseKey, sFilename. Задайте objShell = CreateObject("Shell. Приложение") Задайте WshShell = CreateObject("WScript. черупка") Задайте objFSO = CreateObject("Скриптове. FileSystemObject") Ако WScript. Аргументи. Брой = 0 Тогава sBaseKey = "HKCU\Software\Classes\*\shell\" WshShell. RegWrite sBaseKey & "FindHandle\", "Find Handle", "REG_SZ" WshShell. RegWrite sBaseKey & "FindHandle\command\", "wscript.exe " & & _ WScript. ScriptFullName & & " " & & "%1" &, "REG_SZ" Иначе Ако objFSO.FileExists (WScript. Аргументи (0)) = Вярно Тогава sFilename = lcase (WScript. Аргументи (0)) objShell. ShellExecute "cmd.exe", "/k d:\tools\handle.exe -a -u " & _ & sFilename &, "", "runas", 1 Край Ако. Край, ако

    Забележка: Пътят Sysinternals Handle.exe е твърдо кодиран като d:\tools\handle.exe в горния скрипт. Ако програмата се намира на различен път, променете съответно пътя в скрипта. За 64-битов Windows можете да използвате едно от двете handle.exe или handle64.exe

  4. Кликнете два пъти find_handle.vbs за да добавите записа от контекстното меню в системния регистър. Ще трябва да направите това само веднъж. Но ако преместите скрипта в друга папка, ще трябва да щракнете двукратно върху него отново, за да актуализирате пътя в системния регистър.
  5. ще видите Намерете дръжката опция, когато щракнете с десния бутон върху файл. Щракването върху него ще стартира скрипта, който от своя страна изпълнява handle.exe с аргумента filename, за да намери процеса, който има заключен файл.намерете кой процес е заключен файл - Sysinternals обработват

За да премахнете Намерете дръжката влизане в контекстното меню, стартирайте редактора на системния регистър (regedit.exe) и изтрийте следния ключ:

HKEY_CURRENT_USER\Software\Classes\*\shell\FindHandle

4. OpenFiles.exe — вграден инструмент за конзола

Друг вграден инструмент, който ще използваме, е Openfiles.exe, конзолен инструмент, който не е нов за Windows. Първоначално беше представен през 2000 г. като част от инструментите на Windows Resource Kit 2000/2003. След това тази помощна програма беше включена по подразбиране в Windows Vista и по-нови версии (включително Windows 10). Openfiles показва списъка с отворени в момента файлове от локални или споделени папки, заедно с идентификатора на дръжката и името на изпълнимия файл. Този инструмент също така ви позволява да изключите един или повече файлове, които се отварят дистанционно от споделена папка.

Активирайте глобалния флаг „Поддържане на списъка с обекти“ за първи път

Първо, за да активирате проследяването на локални файлови манипулатори, трябва да включите флага „поддържане на списък с обекти“, като изпълните следната команда от командния ред на администратора.

openfiles /local on

Ще видите следното съобщение:

ИНФОРМАЦИЯ: Системният глобален флаг „поддържане на списък с обекти“ в момента е активиран.

Ще трябва да изпълните тази команда само за първи път. След това рестартирайте Windows, за да влезе в сила промяната.

Вижте отворените файлове и съответните имена на процеси

След рестартиране на Windows, от администраторски команден ред прозорец, напишете:

отворени файлове

Това изброява идентификационния номер на файла/материала, името на процеса и списъка с файлове, отворени локално или отворени дистанционно чрез локални точки за споделяне, в табличен формат.

За да видите изхода в списък или CSV формати, използвайте параметъра /query.

отворени файлове /заявка /FO LIST. отворени файлове /заявка /FO CSV

За да копирате изхода в клипборда, изведете изхода към Clip.exe, както е по-долу. След това поставете изхода в Notepad или всеки друг редактор по ваш избор.

отворени файлове | клип
Намерете кой процес е заключил файл
openfiles /заявка /FO LIST |клип. отворени файлове /заявка /FO CSV |клип
Намерете кой процес е заключил файл

За повече информация относно копирането на изхода на командния ред в клипборда или за запазване на изхода във файл, вижте статията Как да копирам изходния текст на командния ред в клипборда или да запишете във файл?

За да разберете дали даден файл се използва от програма (и да знаете коя програма), можете да използвате следния команден ред.

отворени файлове | findstr /i 

пример:

отворени файлове | findstr /i eiffel

Горната команда изброява всички отворени файлове, които съдържат думата „айфел“ в името на файла. В този пример Word 2016 в момента има заключване на файла „The Eiffel Tower.docx“ (ID 4576).

Намерете кой процес е заключил файл

И диалоговият прозорец „Файл в употреба“ ми казва същото.

Намерете кой процес е заключил файл

Прекъснете връзката на файловете, отворени отдалечено от споделена папка.

За да изключите файловете, отворени от споделената папка, за да можете да изтриете, преименувате файла или да промените съдържанието, използвайте /disconnect параметър за прекъсване на връзки към този файл. Ето опциите на командния ред.

OPENFILES /Прекъсване на връзката [/S система [/U потребителско име [/P [парола]]]] {[/ID id] [/A достъпен от] [/O openmode]} [/OP openfile] Описание: Позволява на администратора да прекъсне връзката на файлове и папки, които са били отворени отдалечено чрез споделен файл папка. Списък с параметри: /S система Указва отдалечената система, към която да се свържете. /U [domain\]user Указва потребителския контекст, при който командата трябва да се изпълни. /P [парола] Указва паролата за даден потребителски контекст. /ID идентификатор Указва за прекъсване на връзката на отворени файлове по идентификатор на файла. Може да се използва заместващият знак "*". /A accessedby Указва за прекъсване на връзката на всички отворени файлове чрез стойността на "accessedby". Може да се използва заместващият знак "*". /O openmode Указва да се прекъснат всички отворени файлове чрез стойността на "openmode". Валидни стойности са Read, Write или Read/Write. Може да се използва заместващият знак "*". /OP openfile Указва за прекъсване на връзката на всички отворени файлови връзки, създадени с конкретно име на "отворен файл". Може да се използва заместващият знак "*". /? Показва това помощно съобщение. Примери: OPENFILES /Прекъсване на връзката /? OPENFILES /Прекъсване /ID 1 OPENFILES /Прекъсване /Потребителско име OPENFILES /Прекъсване /O Четене/Запис на OPENFILES /Прекъсване /OP "c:\My Documents\somedoc.doc" /ID 234 OPENFILES /Прекратяване на връзката /S система /U потребителско име /ID 5 OPENFILES /Прекратяване на връзката /S система /U потребителско име /P парола /ДОКУМЕНТ ЗА САМОЛИЧНОСТ *

Openfiles.exe перфектно върши работата по изброяването на всички отворени файлове заедно с имената на процесите, но не може насилствено да убие процеси. Въпреки това, този отличен (но пренебрегван) вграден инструмент за конзола може да ви бъде полезен, когато искате бързо да намерите име на процес, който използва файл или да прекъснете връзката на файл, който се осъществява чрез споделена папка от потребител на мрежата - без да зависи от трета страна решение.

5. OpenedFilesView

OpenedFilesView от Nirsoft показва списъка с всички отворени файлове във вашата система. За всеки отворен файл се показва допълнителна информация: стойност на манипулатора, достъп за четене/запис/изтриване, позиция на файла, процес който отвори файла и още... По избор можете също да затворите един или повече отворени файлове или да затворите процеса, който отвори тези файлове.

Намерете кой процес е заключил файл

Можете да затворите процеси на избрани файлове или да затворите избрани манипулатори на файлове. Номерът на манипулатора е представен в шестнадесетични стойности, докато конзолният инструмент openfiles.exe го показва в нормален формат. Този инструмент също ви позволява да добавите опция от контекстно меню, за да намерите бързо процеса, който в момента използва файл, чрез менюто с десния бутон. Опцията на контекстното меню/поддръжката на командния ред, според мен, е една от най-полезните функции, предлагани от OpenedFilesView.


Една малка молба: Ако тази публикация ви е харесала, моля, споделете я?

Едно "малко" споделяне от вас сериозно би помогнало много за развитието на този блог. Някои страхотни предложения:
  • Закачете го!
  • Споделете го с любимия си блог + Facebook, Reddit
  • Twitter го!
Така че много ви благодаря за подкрепата, мой читателю. Това няма да отнеме повече от 10 секунди от времето ви. Бутоните за споделяне са точно отдолу. :)

езойскиподайте сигнал за тази обява