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?


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

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


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 .


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.


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.


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



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).


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.


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.


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łę.




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.


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ń.


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


1
Zaktualizowana wersja tego jest monitorem procesu. Możesz go pobrać tutaj: http://technet.microsoft.com/en-us/sysinternals/bb896645
yitwail
Korzystając z naszej strony potwierdzasz, że przeczytałeś(-aś) i rozumiesz nasze zasady używania plików cookie i zasady ochrony prywatności.
Licensed under cc by-sa 3.0 with attribution required.