Jak znaleźć proces, w którym plik jest otwarty w systemie Windows?

515

Jedną z rzeczy, które denerwują mnie bez końca w systemie Windows, jest stary błąd naruszenia zasad udostępniania . Często nie można zidentyfikować, co go utrzymuje. Zwykle jest to tylko edytor lub eksplorator wskazujący odpowiedni katalog, ale czasami musiałem uciekać się do ponownego uruchomienia komputera.

Wszelkie sugestie dotyczące znalezienia sprawcy?

Cletus
źródło
12
Można by pomyśleć, że po całym tym czasie faceci z systemu Windows dadzą nam to łatwo zrobić z poziomu Eksploratora. Zastanawiam się, dlaczego tak się nie stało?
Cawflands
6
Uważam, że Explorer jest bardzo często procesem problemowym, który trzyma plik bez wyraźnego powodu.
Eddie
Wiem, że to ci niewiele pomaga, ale myślę, że pamiętam, że była to planowana funkcja kolejnej wersji systemu Windows po vista i serwerze 2008. a może jest to kwestia WinFS. nie jestem pewien, gdzie to przeczytałem ...
Kip
zobacz moją odpowiedź na temat superużytkownika tutaj , w podsumowaniu OpenedFilesView nadal działa w 2019 r.
Vijay

Odpowiedzi:

440

Miałem sukces z Sysinternals Process Explorer . Dzięki temu możesz wyszukać, który proces (procesy) mają otwarty plik, i możesz użyć go do zamknięcia uchwytów, jeśli chcesz. Oczywiście bezpieczniej jest zamknąć cały proces. Zachowaj ostrożność i osąd.

Aby znaleźć konkretny plik, użyj opcji menu Find->Find Handle or DLL... Wpisz część ścieżki do pliku. Lista procesów pojawi się poniżej.

Jeśli wolisz wiersz poleceń, pakiet Sysinternals zawiera uchwyt wiersza poleceń , który wyświetla listę otwartych uchwytów. Kilka przykładów, jak go używać:

  • c:\Program Files\SysinternalsSuite>handle.exe |findstr /i e:\ - znajdź wszystkie pliki otwarte z dysku E:
  • c:\Program Files\SysinternalsSuite>handle.exe |findstr /i file-or-path-in-question
Eddie
źródło
17
Możesz zamknąć uchwyt, ale pamiętaj, że wyciągasz dywan spod aplikacji, wyniki będą w najlepszym razie nieprzewidywalne.
WaldenL
12
@Walden: Absolutnie. YMMV. W WinXP wiele razy miałem Eksploratora otwierającego uchwyt bez wyraźnego powodu i odmawiającego jego zamknięcia. Gdy dzieje się tak w pliku, który musisz usunąć, masz do wyboru wymuszenie zamknięcia uchwytu lub ponowne uruchomienie. Jak dotąd, robiąc to kilkadziesiąt razy, nie doznałem żadnych złych skutków. Jak w przypadku każdego zaawansowanego narzędzia, używaj go z rozwagą i rozsądkiem.
Eddie
5
Zamknięcie uchwytów może spowodować, że aplikacja ponownie użyje uchwytu na innym pliku, powodując uszkodzenie - patrz odpowiedź Jeffa poniżej: serverfault.com/a/15695/79266 ... znacznie bezpieczniej zabić aplikację trzymającą otwarty plik, jeśli nie chcę restartować.
RichVel
14
Dla odkrywcy, btw, przytrzymaj ctrl-shift i kliknij prawym przyciskiem myszy pusty obszar menu startowego, a otrzymasz „Exit Explorer” - ps, niezupełnie odpowiedź Jeffa.
Mark Sowul
2
Nie pomaga w przypadku pliku niewykonawczego ig pliku tekstowego. Muszę wiedzieć, kto pisze do pliku dziennika. Dowolny pomysł?
Xaqron,
183

W tym celu można użyć Monitora zasobów, który jest wbudowany w Windows 7, 8 i 10.

  1. Otwórz Monitor zasobów , który można znaleźć
    • Szukając Resource Monitor lub resmon.exe w menu Start, lub
    • Jako przycisk na karcie Wydajność w Menedżerze zadań
  2. Przejdź do zakładki CPU
  3. Użyj pola wyszukiwania w Associated Uchwyty sekcję
    • Zobacz niebieską strzałkę na zrzucie ekranu poniżej

Po znalezieniu uchwytu możesz zidentyfikować proces, patrząc na kolumnę Obraz i / lub PID.

Następnie możesz spróbować zamknąć aplikację w normalny sposób lub, jeśli nie jest to możliwe, wystarczy kliknąć prawym przyciskiem myszy uchwyt i zabić proces bezpośrednio z tego miejsca. Bułka z masłem!

Zrzut ekranu Monitora zasobów

Skopiowano z mojej oryginalnej odpowiedzi: https://superuser.com/a/643312/62

Svish
źródło
2
Warto zauważyć, że znalezienie tego programu w systemie Windows 8 może być trudne - poszukiwanie „resmon.exe” powinno go zlokalizować.
Kylotan,
4
@Kylotan, Przestań marnować czas na wyszukiwanie. Wystarczy uruchomić resmon bezpośrednio z cmd
Pacerier
1
@Pacerier: Nicea. Nie jestem przyzwyczajony do rzeczy znajdujących się na ścieżce Windows.
Kylotan,
To mi odpowiada bardziej niż „Handle | Alternatywy FindStr i „Unlocker”, chociaż są również skuteczne
Marcus Vinicius Pompeu
4
Wciąż działa w systemie Windows 10 i można go znaleźć za pomocą przycisku „Otwórz monitor zasobów” w Menedżerze zadań -> zakładka Wydajność.
Norman Breau,
92

Wypróbuj polecenie openfiles .

John Fouhy
źródło
10
+1 dla wbudowanego polecenia, chociaż ja osobiście używam ProcessExplorer przez większość czasu.
RBerteig
Naprawdę pomocny.
marko
7
BŁĄD: System docelowy musi mieć 32-bitowy system operacyjny.
Bozojoe
4
nie działa dla 64 systemów operacyjnych!
12
Wygląda na to, że działa w systemie Windows 2012R2 64-bitowym, ale musisz włączyć usługę „otwórz lokalne śledzenie” poprzez uruchomienie openfiles /local oni ponowne uruchomienie. To sprawia, że ​​ta funkcja nie jest bardzo przydatna.
Guss
82

Bądź bardzo ostrożny przy zamykaniu uchwytów; jest to nawet bardziej niebezpieczne, niż mogłoby się wydawać, z powodu recyklingu uchwytu - jeśli zamkniesz uchwyt pliku, a program otworzy coś innego, ten oryginalny uchwyt pliku, który zamknąłeś, może zostać ponownie wykorzystany do tego „czegoś innego”. A teraz zgadnij, co się stanie, jeśli program będzie kontynuował, myśląc, że działa na pliku (którego uchwyt został zamknięty), podczas gdy w rzeczywistości uchwyt pliku wskazuje teraz na coś innego.

zobacz post Raymonda Chena na ten temat

Załóżmy, że usługa indeksu wyszukiwania ma otwarty plik do indeksowania, ale utknął tymczasowo i chcesz go usunąć, więc (nierozsądnie) wymuś zamknięcie dojścia. Usługa indeksu wyszukiwania otwiera swój plik dziennika w celu zarejestrowania niektórych informacji, a uchwyt do usuniętego pliku jest przetwarzany ponownie jako uchwyt do pliku dziennika. Operacja zablokowania w końcu się kończy, a usługa indeksu wyszukiwania w końcu zaczyna zamykać uchwyt, który miał otwarty, ale ostatecznie nieświadomie zamyka uchwyt pliku dziennika.

Usługa indeksu wyszukiwania otwiera inny plik, powiedzmy plik konfiguracyjny do zapisu, aby mógł zaktualizować jakiś trwały stan. Uchwyt pliku dziennika jest przetwarzany ponownie jako uchwyt pliku konfiguracji. Usługa indeksu wyszukiwania chce zapisać pewne informacje, więc zapisuje w pliku dziennika. Niestety uchwyt pliku dziennika został zamknięty, a uchwyt ponownie wykorzystany do pliku konfiguracyjnego. Zarejestrowane informacje trafiają do pliku konfiguracyjnego, powodując jego uszkodzenie.

Tymczasem inny uchwyt, który wymusiłeś zamknięty, został ponownie użyty jako uchwyt mutex, który służy do zapobiegania uszkodzeniom danych. Gdy oryginalny uchwyt pliku jest zamknięty, uchwyt mutexu jest zamknięty, a zabezpieczenia przed uszkodzeniem danych są tracone. Im dłużej usługa działa, tym bardziej skorumpowane stają się jej indeksy. W końcu ktoś zauważa, że ​​indeks zwraca nieprawidłowe wyniki. Podczas próby ponownego uruchomienia usługi nie powiedzie się, ponieważ pliki konfiguracyjne zostały uszkodzone.

Zgłoś problem firmie, która świadczy usługę indeksu wyszukiwania, a oni ustalą, że indeks został uszkodzony, plik dziennika w tajemniczy sposób przestał rejestrować, a plik konfiguracyjny został zastąpiony śmieciami. Niektórym słabym technikom powierzono beznadziejne zadanie dowiedzenia się, dlaczego usługa psuje indeksy i pliki konfiguracyjne, nieświadoma, że ​​przyczyną uszkodzenia jest wymuszenie zamknięcia uchwytu.

Mark Sowul
źródło
12
ważne ostrzeżenie, powinno to zbliżyć się do szczytu - ponowne uruchomienie jest prawdopodobnie lepsze niż cicho uszkodzony plik.
RichVel
6
+1 To z pewnością sprawi, że zastanowię się dwa razy nad wymuszeniem zamkniętych uchwytów! Wydaje mi się dziwne, że Windows natychmiast ponownie użyje numeru zamkniętego uchwytu, zamiast zwiększać liczbę i owijać tylko w razie potrzeby. To przynajmniej znacznie zmniejszy szanse na wystąpienie tego problemu.
EM0,
1
@RichVel Zakończenie procesu sprawcy jest prawdopodobnie lepsze niż całkowite ponowne uruchomienie.
Dmitrij Grigoriew
@DmitryGrigoryev - dobra uwaga, a tak naprawdę wspomniałem już o tym tutaj
RichVel
2
Jest to bardzo ważne ostrzeżenie, ale nie odpowiada na pytanie Jak znaleźć proces, w którym plik jest otwarty w systemie Windows?
Ploni
29

W przeszłości korzystałem z Handle, aby znaleźć takie procesy.

Greg Hewgill
źródło
3
Cały czas używam tego narzędzia. Jeśli nie mogę wysunąć dysku USB, po prostu wpisuję „uchwyt H:” (lub dowolną literę dysku). Co najlepsze, możesz użyć go do wymuszenia ścisłego uchwytu.
Chris Thompson
10

Lockhunter ( http://lockhunter.com/ ) działa w systemach 32- i 64-bitowych.

Tablica wyników
źródło
Jest również dostępny z menu kontekstowego tego pliku w Eksploratorze Windows.
user61849
7

Who Lock Me działa dobrze i sprawia, że ​​ludzie bawią się tym imieniem!

Ogólny błąd
źródło
Nie działa w 64-bitowych systemach Windows 8 i 10.
rustyx
7

Aby to wyjaśnić, jest to bardziej prawdopodobne, że aplikacje innych firm źle wykorzystują wywołanie API CreateFile API, niż w jakimkolwiek systemie Windows. Być może jest to konsekwencja projektu CreateFile, ale zrobione jest już zrobione i nie możemy wrócić.

Zasadniczo podczas otwierania pliku w programie systemu Windows można określić flagę, która umożliwia wspólny dostęp. Jeśli nie określisz flagi, program uzyska wyłączny dostęp do pliku.

Otóż, jeśli Explorer wydaje się tutaj winowajcą, być może jest to na pozór i że prawdziwy winowajcą jest coś, co instaluje rozszerzenie powłoki, które otwiera wszystkie pliki w folderze na własne potrzeby, ale jest też zbyt gung-ho, robiąc to, albo to nie oczyszcza się odpowiednio po sobie. Symantec AV to coś, co widziałem, robiąc to wcześniej, i nie byłbym zaskoczony, gdyby inne programy AV również były winne. Wtyczki kontroli źródła mogą być również winne.

Tak naprawdę nie jest to odpowiedź, ale tylko kilka porad, by nie zawsze obwiniać Windows za coś, co może być źle napisanym programem innej firmy (coś, co może się zdarzyć w każdym innym systemie operacyjnym z niejawnym blokowaniem plików, ale każdy system operacyjny oparty na Uniksie ma wspólny dostęp przez domyślna).

Maximus Minimus
źródło
1
Nie będę obwiniał aplikacji innej firmy za to, że mój Eksplorator Windows zawsze blokuje pliki Thumbs.db w swoim katalogu roboczym, ale nie zawsze odblokowuje go po zmianie katalogu roboczego. Przynajmniej są odblokowane, kiedy zamykam okno, nie muszę zabijać WSZYSTKICH odkrywców ...
Alexander
@Darth, Czy jesteś sprzedawcą od Microsoft?
Pacerier
6

Na zdalnym serwerze, gdy sprawdzasz udział sieciowy, coś tak prostego jak konsola Zarządzanie komputerem może wyświetlić te informacje i zamknąć plik.

K. Brian Kelley
źródło
Właśnie, dlaczego są takie skomplikowane odpowiedzi?
Rohit Gupta
6

Apropos Explorer trzyma plik otwarty: „Gdy dzieje się tak w pliku, który musisz usunąć, możesz wymusić zamknięcie uchwytu lub zrestartować komputer”.

Możesz po prostu zakończyć Eksploratora.

Jeśli jest to jednorazowa sprawa (Explorer zwykle nie utrzymuje tego pliku w pozycji otwartej), domyślam się, że wylogowanie i ponowne zalogowanie załatwi sprawę.

W przeciwnym razie zabij proces Eksploratora pulpitu i rób, co chcesz, gdy go nie będzie. Najpierw uruchom kopię pliku cmd.exe (potrzebujesz interfejsu użytkownika, aby wykonać zamierzone czyszczenie). Upewnij się, że nie działają żadne Eksploratory inne niż stacjonarne. Następnie zabij ostatniego Eksploratora, np. Menedżerem zadań. Rób, co chcesz w wierszu polecenia. Na koniec uruchom Eksploratora z wiersza polecenia, a stanie się pulpitem.

Sądzę, że może być trochę nieprzyjemności, jeśli niektóre programy systray nie mogą poradzić sobie z ponownym uruchomieniem powłoki.


źródło
1
Jest to o wiele bezpieczniejsze niż zamknięcie uchwytu i mniej zakłócające niż ponowne uruchamianie. Dotyczy to także innych programów - często znajduję program pakietu Microsoft Office blokujący pliki nawet po ich zamknięciu.
RichVel
5

Pliki mogą być blokowane przez lokalne procesy ( odblokowanie to narzędzie do użycia) i przez dostęp do plików, który przychodzi poprzez udziały.

W systemie Windows jest wbudowana funkcja, która pokazuje, jakie pliki na komputerze lokalnym są otwierane / blokowane przez komputer zdalny (który ma plik otwarty przez udział plików):

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

Tam możesz nawet zamknąć plik na siłę.

Dirk Paessler
źródło
4

Istnieje również widok Otwartych plików NirSoft .

Christopher Galpin
źródło
1
Osobiście podoba mi się to bardziej niż Process Explorer do tych konkretnych zadań.
JamesBarnett,
4

Dzięki Process Hacker możesz łatwo określić, które procesy przechowują twoje pliki:

Znajdź uchwyty lub biblioteki DLL

Ivan Kochurkin
źródło
2

Powyższe wyżej ocenione odpowiedzi dotyczą sytuacji, w których proces programu trzyma uchwyt pliku otwarty, co (na szczęście) jest przez większość czasu - jednak w niektórych przypadkach (jak ma to miejsce obecnie w tym systemie) sam system trzyma uchwyt pliku otwarty.

Możesz zidentyfikować tę sytuację, postępując zgodnie z instrukcjami, aby znaleźć proces przechowywania dojścia do pliku za pomocą eksploratora procesów powyżej i zauważając, że nazwa procesu jest wymieniona jako „system”, lub postępując zgodnie z instrukcjami za pomocą monitora zasobów i zauważając, że nie jest wyświetlany żaden obraz otwieranie uchwytu pliku na zainteresowanym pliku (chociaż oczywiście coś działa, ponieważ nie można edytować / usunąć pliku itp.).

Jeśli tak się stanie, twoją opcją (o ile mi wiadomo) jest ponowne uruchomienie - lub zapomnienie o zrobieniu czegokolwiek z tym plikiem.

Blair
źródło
0

Jakiś czas temu zostałem włączony do Exteneded Task Managera przez blog Jeremy Zawodny, i jest świetny do śledzenia dalszych informacji o procesach. +1 dla Process Explorer, jak wyżej, szczególnie w przypadku zabijania procesów, których nie kończy standardowy menedżer zadań.

nedm
źródło
0

Jest narzędzie FILEMON i pokazuje otwarte pliki i uchwyty. Trudno jest nadążyć za wyświetlaczem, jeśli oglądasz go na żywo, robi to tak szybko. Możesz jednak zatrzymać wyświetlanie na żywo i obserwować wszystkie operacje otwierania / zapisywania plików. Teraz jest własnością Microsoft, ale pierwotnie Sysinternals

użytkownik44304
źródło
1
Zaktualizowana wersja tego jest monitorem procesu. Możesz go pobrać tutaj: http://technet.microsoft.com/en-us/sysinternals/bb896645
yitwail