Як ви дізнаєтеся, який процес утримує файл, відкритий у Windows?


515

Одне, що мене не дратує в Windows - стара помилка порушення спільного використання . Часто ви не можете визначити, що тримає його відкритим. Зазвичай це просто редактор або провідник, який просто вказує на відповідний каталог, але іноді мені доводиться вдаватися до перезавантаження машини.

Будь-які пропозиції, як знайти винуватця?


12
Ви б могли подумати, що після цього часу хлопці з Windows дадуть нам можливість це легко зробити з Провідника. Цікаво, чому цього не сталося?
Cawflands

6
Я вважаю, що Explorer дуже часто є проблемним процесом, який тримається за файл без очевидних причин.
Едді

Я знаю, що це вам не дуже допомагає, але я думаю, що я пам’ятав, що це була запланована особливість наступного випуску Windows після Vista і 2008 сервера. а може, це справа WinFS. не впевнений, де я це читав ...
Кіп

дивіться мою відповідь про суперпользователя тут , резюме OpenedFilesView все ще працює у 2019 році
Vijay

Відповіді:


440

Я мав успіх із Sysinternals Process Explorer . За допомогою цього ви можете шукати, який процес (-ів) має відкритий файл, і ви можете використовувати його для закриття ручки (-ів), якщо хочете. Звичайно, безпечніше закрити весь процес. Виявляйте обережність і розсудливість.

Щоб знайти конкретний файл, скористайтеся опцією меню Find->Find Handle or DLL... Введіть частину шляху до файлу. Список процесів з’явиться нижче.

Якщо ви віддаєте перевагу командному рядку, пакет Sysinternals включає в себе інструмент командного рядка " Ручка" , який містить список відкритих ручок. Кілька прикладів, як його використовувати:

  • c:\Program Files\SysinternalsSuite>handle.exe |findstr /i e:\ - знайти всі файли, відкриті з диска E:
  • c:\Program Files\SysinternalsSuite>handle.exe |findstr /i file-or-path-in-question

17
Ви можете закрити ручку, але майте на увазі, ви витягуєте килим з-під програми, результати будуть у кращому випадку непередбачуваними.
WaldenL

12
@Walden: Абсолютно. YMMV. З WinXP мені багато разів довелося Explorer відкривати ручку без очевидних причин і відмовлялася її закривати. Коли це відбувається у файлі, який потрібно видалити, у вас є вибір примусити ручку закрити або перезавантажити. Поки що, зробивши це десятки разів, я не зазнав жодного поганого ефекту. Як і будь-який вдосконалений інструмент, використовуйте обережно і судження.
Едді

5
Закриття ручок може призвести до повторного використання додатка ручки в іншому файлі, що призведе до пошкодження - див. Відповідь Джеффа нижче: serverfault.com/a/15695/79266 ... набагато безпечніше вбити програму, яка тримає файл відкритим, якщо ви не хочу перезавантажувати.
RichVel

14
Для Explorer, btw, утримуйте ctrl-shift і клацніть правою кнопкою миші порожнє місце меню "Пуск", і ви отримаєте "Exit Explorer" - ps, не зовсім відповідь Джеффа ..
Mark Sowul

2
Це не допомагає не виконавчому файлу ig текстовому файлу. Мені потрібно знати, хто пише в файл журналу. Будь-яка ідея?
Xaqron

183

Ви можете використовувати Монітор ресурсів для цього, який вбудований в Windows 7, 8 та 10.

  1. Монітор відкритих ресурсів , який можна знайти
    • Шукаючи Монітор ресурсів або resmon.exe у меню запуску, або
    • Як кнопка на вкладці « Продуктивність » у вашому диспетчері завдань
  2. Перейдіть на вкладку ЦП
  3. Використовуйте поле пошуку в Associated Рукоятки розділу
    • Дивіться синю стрілку на знімку екрана нижче

Знайшовши ручку, ви можете ідентифікувати процес, переглянувши стовпець Зображення та / або PID.

Потім ви можете спробувати закрити програму, як зазвичай, або, якщо це неможливо, просто клацніть правою кнопкою миші на ручці та вбити процес прямо звідти. Простенька!

Скріншот монітора ресурсів

Скопійовано з моєї оригінальної відповіді: https://superuser.com/a/643312/62


2
Варто зазначити, що ця програма може бути складно знайти в Windows 8 - пошук 'resmon.exe' повинен знайти її.
Килотан

4
@Kylotan, перестань витрачати час на пошук. Просто запустіть resmon прямо з cmd
Pacerier

1
@Pacerier: Приємно. Я не звик до речей, що знаходяться на шляху до Windows.
Кілотан

Це мені більше підходить, ніж «Ручка | Альтернативи FindStr 'та' Unlocker ', хоча вони також ефективні
Маркус Вініцій Помпеу

4
Досі діє в Windows 10, і його можна знайти, скориставшись кнопкою «Відкрити монітор ресурсів» на Диспетчері завдань -> вкладка Продуктивність.
Норман Бро

92

Спробуйте команду openfiles .


10
+1 для вбудованої команди, хоча я більшість часу особисто використовую ProcessExplorer.
RBerteig

Дуже корисно.
marko

7
ПОМИЛКА: цільова система повинна мати 32-бітну ОС.
Bozojoe

4
не працює для 64 ОС!

12
Схоже, це працює для Windows 2012R2 64bit, але вам потрібно включити послугу "відкрите локальне відстеження" шляхом запуску openfiles /local onта перезапуску. Це робить цю функцію не дуже корисною.
Гасс

82

Будьте дуже обережні з закривальними ручками; це навіть небезпечніше, ніж ви думаєте, через переробку ручки - якщо ви закриєте ручку файлу, а програма відкриє щось інше, ця оригінальна закрита вами робота файлу може бути повторно використана для цього "чогось іншого". А тепер здогадайтесь, що станеться, якщо програма продовжується, думаючи, що вона працює над файлом (чию ручку ви закрили), коли насправді ця ручка файлу тепер вказує на щось інше.

див. публікацію Реймонда Чена на цю тему

Припустимо, у службі індексу пошуку відкритий файл для індексації, але він тимчасово застряг, і ви хочете видалити файл, тому ви (нерозумно) змусите ручку закрити. Служба індексу пошуку відкриває свій файл журналу, щоб записати деяку інформацію, а обробка видаленого файлу переробляється як ручка до файлу журналу. Операція застрягання нарешті завершується, і служба пошуку індексу нарешті закінчується, щоб закрити цю ручку, яку вона відкрила, але вона мимоволі закриває ручку файлу журналу.

Служба індексу пошуку відкриває інший файл, скажімо, файл конфігурації для запису, щоб він міг оновити деякий стійкий стан. Ручка для файлу журналу переробляється як ручка для конфігураційного файла. Служба індексу пошуку хоче записати деяку інформацію, тому записує у свій файл журналу. На жаль, ручка файлу журналу була закрита, і ручка повторно використана для конфігураційного файла. Записана інформація надходить у файл конфігурації, пошкоджуючи її.

Тим часом ще одна ручка, яку ви примусово закрили, була повторно використана як ручка з мютексом, яка використовується для запобігання пошкодження даних. Коли оригінальна ручка файлу закрита, ручка mutex закривається і захист від пошкодження даних втрачається. Чим довше працює служба, тим більш пошкодженими стають її індекси. Врешті хтось помітить, що індекс повертає невірні результати. При спробі перезапустити службу вона не вдається, оскільки її файли конфігурації були пошкоджені.

Ви повідомляєте про проблему компанії, яка виробляє службу пошуку індексу, і вони визначають, що індекс був пошкоджений, файл журналу загадково зупинив журнал, а файл конфігурації перезаписали сміттям. Якомусь бідному техніку покладається безперспективне завдання з'ясувати, чому служба пошкоджує свої індекси та файли конфігурації, не знаючи, що джерелом пошкодження є те, що ви змусили ручку закрити.


12
Важливе попередження, це повинно наближатися до верху - перезавантаження, ймовірно, краще, ніж тихо пошкоджений файл.
RichVel

6
+1 Це, безумовно, змусить мене задуматися про примушування ручок закритими! Мені здається дивним, що Windows негайно повторно використовує номер закритої ручки, а не продовжує збільшувати число та обертатись лише при необхідності. Це хоча б значно знизить шанси на виникнення цієї проблеми.
EM0

1
@RichVel Завершення процесу винуватця, ймовірно, краще, ніж повне перезавантаження.
Дмитро Григор’єв

@DmitryGrigoryev - хороший момент, і насправді я вже згадував, що тут
RichVel

2
Це дуже важливе попередження, але не відповідає на питання, як знайти який процес містить файл, відкритий у Windows?
Плоні

29

Я з успіхом використовував Handle для пошуку таких процесів у минулому.


3
Я постійно користуюся цим інструментом. Якщо я не можу вийняти USB-накопичувач, просто введіть "handle H:" (або будь-яку літеру диска). Найкраще, що ви можете використовувати його для примусового закриття ручок.
Кріс Томпсон



7

Просто для уточнення, швидше за все, це є наслідком неправильного поводження сторонніх додатків, які не правильно використовують виклик API CreateFile, ніж будь-що в самій Windows. Можливо, це наслідок дизайну CreateFile, але все зроблено, і ми не можемо повернутися назад.

В основному при відкритті файлу в програмі Windows у вас є можливість вказати прапор, який дозволяє спільний доступ. Якщо ви не вказали прапор, програма отримує ексклюзивний доступ до файлу.

Тепер, якщо тут видається винуватцем Провідника, можливо, це так, що це просто на поверхні, а справжній винуватець - це те, що встановлює розширення оболонки, яке відкриває всі файли в папці для власних цілей, але це теж занадто гун-хо, роблячи це, або що не прибирає належним чином після себе. Symantec AV - це те, що я бачив, як робив це раніше, і я не здивуюся, якщо в цьому винні й інші програми AV. Також можуть бути винні плагіни управління джерелом.

Тож не справжня відповідь, а лише кілька порад не завжди звинувачувати Windows у тому, що може бути погано написана програма сторонніх розробників (те, що може трапитися і в будь-якій іншій ОС, яка має неявне блокування файлів, але будь-яка ОС на базі Unix має спільний доступ за замовчуванням).


1
Я не буду звинувачувати сторонній додаток у тому, що мій провідник Windows завжди блокує файли Thumbs.db у своєму робочому каталозі, але не завжди розблоковує його, коли я перемикаю робочий каталог. Принаймні, вони розблокуються, коли я закриваю вікно, мені не доведеться вбивати ВСІХ дослідників ...
Олександр

@Darth, ти маркетолог від Microsoft?
Pacerier

6

На віддаленому сервері, коли ви перевіряєте мережеву поділку, щось таке просте, як консоль управління комп'ютером, може відображати цю інформацію та закривати файл.


Точно чому такі складні відповіді?
Рохіт Гупта

6

Провідник Apropos з відкритим файлом: "Коли це відбувається у файлі, який потрібно видалити, у вас є вибір примусити ручку закрити або перезавантажити."

Ви можете просто закінчити Провідник.

Якщо це разова річ (Explorer зазвичай не тримає цей файл відкритим), я б припустив, що вихід із системи та вхід у систему знову виконають цю справу.

В іншому випадку вбийте процес настільного провідника і робіть все, що завгодно, поки його немає. Спочатку запустіть копію cmd.exe (для очищення потрібен інтерфейс користувача). Переконайтеся, що не працюють запускаючі програми, що не працюють на робочому столі. Потім вбити останнього Провідника за допомогою, наприклад, диспетчера завдань. Виконайте те, що ви хочете в командному рядку. Нарешті, запустіть Explorer з командного рядка, і він стане робочим столом.

Я б припустив, що можуть виникнути залишки неприємностей, якщо деякі програми systray не можуть впоратися із перезапуском оболонки.


1
Це набагато безпечніше, ніж закриття ручки, і менш руйнівне, ніж перезавантаження. Застосовується і для інших програм - я часто виявляю, що програма Microsoft Office містить блокування файлів навіть після закриття їх.
RichVel

5

Файли можуть бути заблоковані локальними процесами ( unlocker - це інструмент для використання) та доступом до файлів, який надходить через спільні папки.

У Windows є вбудована функція, яка показує, які файли на локальному комп’ютері відкриті / заблоковані віддаленим комп'ютером (у якому файл відкритий через спільний доступ до файлів):

* Select "Manage Computer" (Open "Computer Management")
* click "Shared Folders"
* choose "Open Files"

Там ви навіть можете насильно закрити файл.




2

Вищевикладені відповіді стосуються ситуацій, коли програмний процес утримує ручку файлу відкритою, що (на щастя) є більшістю часу - однак у деяких випадках (як це відбувається в цій системі на даний момент), сама система тримає ручку файлу відчинено.

Ви можете визначити цю ситуацію, дотримуючись вказівок, щоб знайти процес утримування ручки файлів із провідником процесів вище, і зазначивши, що ім'я процесу вказано як "система", або дотримуючись інструкцій за допомогою монітора ресурсів та зазначивши, що зображення не відображається відкритий файл файлів на вашому цікавому файлі (хоча, очевидно, щось відбувається, оскільки ви не можете редагувати / видаляти і т.д. файл).

Якщо це трапиться, ваш варіант (наскільки я знаю) - перезапустити - або забути робити щось із цим файлом.


0

Нещодавно я повернувся до розширеного диспетчера завдань за допомогою блогу Джеремі Заводного, і це чудово підходить і для відстеження подальшої інформації про процеси. +1 також для Process Explorer, як описано вище, особливо для вбивства процесів, які стандартний диспетчер завдань не закінчиться.


0

Є інструмент FILEMON і показує відкриті файли та ручки. Важко не відставати від його відображення, якщо ви дивитесь його наживо, це робить це швидко. Але ви можете зупинити його показ у прямому ефірі, і ви можете спостерігати за тим, як усі файли відкриваються та записуються. Зараз належить Microsoft, але спочатку Sysinternals


1
Оновлена ​​версія цього монітора процесу. Отримати це можна тут: http://technet.microsoft.com/en-us/sysinternals/bb896645
yitwail
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.