Jak zidentyfikować proces, który zablokował plik w systemie Windows

Podczas próby usunięcia pliku lub folderu używanego przez proces pojawia się okno dialogowe Plik w użyciu, zawierające nazwę programu, który zablokował plik.

Istnieją jednak przypadki, w których okno dialogowe "Plik w użyciu" nie pokazuje nazwy procesu, który ma blokadę na pliku, który próbujesz usunąć. W niektórych przypadkach okno dialogowe pokaże „akcja nie może zostać zakończona, ponieważ plik jest otwarty w inny proces“.

Znajdź, który proces zablokował plik

W przypadku badania procesów i zablokowanych plików Windows Sysinternals Process Explorer jest prawdopodobnie pierwszą opcją, która przychodzi do głowy większości użytkowników. Są jednak dwa wbudowane rozwiązania aby wyświetlić listę aktualnie otwartych plików wraz z odpowiadającymi im nazwami procesów.

Znajdź, który proces zablokował plik za pomocą:

  1. Monitor zasobów (resmon.exe)
  2. Process Explorer firmy Microsoft Sysinternals
  3. Uchwyt z Microsoft Sysinternals
    • Znajdź uchwyt pliku za pomocą menu prawego przycisku myszy
  4. Wbudowane narzędzie konsoli Openfiles.exe
    • Włącz śledzenie lokalnych uchwytów plików
    • Wyświetl otwarte pliki i odpowiadające im nazwy procesów
    • Odłącz pliki otwarte od udostępnionych folderów
  5. OpenedFilesView z Nirsoft.net (firmy trzeciej)

1. Monitor zasobów

Monitor zasobów (resmon.exe) to wbudowane narzędzie, które ma wiele przydatnych funkcji. Dzięki Monitorowi zasobów możesz śledzić bieżące korzystanie z sieci i internetu, wyświetl powiązane uchwyty dla zablokowane pliki, a także zarządzaj procesami tak samo, jak przy użyciu Menedżera zadań.

Aby znaleźć nazwę procesu, który ma zablokowany plik, kliknij kartę CPU, wpisz nazwę pliku lub jej część w polu tekstowym Associated Handles.

Znajdź, który proces zablokował plik

Wcześniej omówiliśmy Monitor zasobów. Sprawdź te artykuły:

  • Jak korzystać z Monitora zasobów, aby znaleźć proces, który zablokował plik?
  • Który program wykorzystuje całą Twoją przepustowość Internetu? Użyj Monitora zasobów, aby go znaleźć

2. Eksplorator procesów

Eksplorator procesów nie trzeba przedstawiać. W Process Explorer wystarczy użyć funkcji Znajdź i wpisać nazwę pliku. Pokazuje proces, który uzyskuje dostęp do pliku.

Znajdź, który proces zablokował plik

W widoku dolnego panelu możesz w razie potrzeby zamknąć uchwyt pliku.

Musisz uruchomić Process Explorer jako administrator, aby zarządzać procesami, które są uruchomione z podwyższonym poziomem uprawnień. Aby podnieść poziom Eksploratora procesów, kliknij menu Plik → Pokaż szczegóły wszystkich procesów.

Zapoznaj się z tymi artykułami związanymi z Eksploratorem procesów:

  • Jak usunąć uparty nieusuwalny plik lub folder w systemie Windows?
  • Znajdź, który program aktualnie używa Twojej kamery internetowej
  • Jak znaleźć, który program spowodował nieznany komunikat o błędzie?
  • Co oznacza nieudane wyliczenie obiektów w kontenerze?

3. Uchwyt z Windows Sysinternals

Uchwyt to narzędzie firmy Microsoft Sysinternals, które wyświetla informacje o otwartych dojściach do dowolnego procesu w systemie. Możesz go użyć, aby zobaczyć programy, które mają otwarty plik, lub zobaczyć typy obiektów i nazwy wszystkich uchwytów programu. Handle jest jak wersja wiersza poleceń Eksplorator procesów.

Notatka: Uchwyt v4.21 ma mały błąd gdzie zawsze zgłasza „Nie znaleziono pasujących uchwytów”, jeśli litera dysku jest pisana wielką literą. Mam nadzieję, że Microsoft naprawi to w następnej aktualizacji.

Z Wiersz polecenia administratora okna, użyj składni wiersza poleceń, aby znaleźć proces, który ma otwarty plik:

handle.exe -a -u nazwa_pliku_ze_ścieżką

Jeśli nazwa pliku zawiera spacje, umieść ją w podwójnych cudzysłowach.

Przykład:

handle.exe -a -u "c:\users\ramesh\desktop\Mandate-form.pdf"
znajdź zablokowany plik procesu - uchwyt sysinternals

(Wzmianka o nazwie pliku bez ścieżki może nie działać w każdej sytuacji. Wskazane jest, aby zawsze uwzględniać pełną ścieżkę.)

Dane wyjściowe pokazują nazwę procesu, identyfikator procesu, nazwę użytkownika, nazwę zablokowanego (docelowego) pliku ze ścieżką.

Uchwyt Sysinternals: argumenty wiersza poleceń

użycie: uchwyt [[-a [-l]] [-u] | [-c [-y]] | [-s]] [-p |] [imię i nazwisko] [-nobanner]
-a Zrzuć wszystkie informacje dotyczące obsługi.
-I Po prostu pokaż uchwyty sekcji z plikami stronicowania.
-C Zamyka określone dojście (interpretowane jako liczba szesnastkowa).
Musisz określić proces przez jego PID.OSTRZEŻENIE: Zamknięcie uchwytów może spowodować niestabilność aplikacji lub systemu.
-y Nie pytaj o potwierdzenie zamknięcia uchwytu.
-s Liczba wydruków dla każdego rodzaju otwartego uchwytu.
-u Podczas wyszukiwania uchwytów pokaż nazwę użytkownika będącego właścicielem.
-P Uchwyty zrzutu należące do procesu (zaakceptowana częściowa nazwa).
Nazwa Szukaj uchwytów do obiektów za pomocą (fragment zaakceptowany).
-nobanner Nie wyświetlaj banera startowego ani komunikatu o prawach autorskich.

Żadne argumenty nie zrzucą wszystkich odwołań do plików.

Dodaj uchwyt Sysinternals do menu prawego przycisku myszy

Możesz dodać Sysinternals Handle do menu prawego przycisku myszy dla plików, aby szybko znaleźć program, który zablokował plik. Aby dodać go do menu kontekstowego, wykonaj następujące kroki:

  1. Ściągnij Uchwyt z witryny Microsoft Sysinternals.
  2. Skopiuj pliki handle.exe & handle64.exe do folderu – np. d:\narzędzia
  3. Skopiuj następujące wiersze kodu do Notatnika i zapisz plik jako znajdź_uchwyt.vbs do stałej lokalizacji.
    'Uruchamia narzędzie Sysinternals Handle.exe z argumentem nazwa pliku. '© Ramesh Srinivasan -- https://winhelponline.com/blog. „Data utworzenia: 29 marca 2008 r. „Data aktualizacji: 11 czerwca 2019 r. „Dla wszystkich wersji systemu Windows, w tym Windows 10 Option Explicit. Dim objShell, WshShell, objFSO, sBaseKey, sFilename. Ustaw objShell = CreateObject("Powłoka. Podanie") Ustaw WshShell = CreateObject("WScript. Muszla") Ustaw objFSO = CreateObject("Skrypty. Obiekt systemu plików") Jeśli WScript. Argumenty. Count = 0 Następnie sBaseKey = "HKCU\Software\Classes\*\shell\" WshShell. RegWrite sBaseKey i „FindHandle\”, „Znajdź uchwyt”, „REG_SZ” WshShell. RegWrite sBaseKey & "FindHandle\command\", "wscript.exe" & & _ WScript. Pełna nazwa skryptu & & " " & & "%1" &, "REG_SZ" Inaczej Jeśli objFSO.FileExists (WScript. Argumenty (0)) = Prawda Następnie sFilename = lcase (WScript. Argumenty (0)) objShell. ShellExecute "cmd.exe", "/k d:\tools\handle.exe -a -u " & _ & sFilename &, "", "runas", 1 End If. Zakończ, jeśli

    Notatka: Ścieżka Sysinternals Handle.exe jest zakodowana jako d:\narzędzia\uchwyt.exe w powyższym skrypcie. Jeśli program znajduje się na innej ścieżce, odpowiednio zmodyfikuj ścieżkę w skrypcie. W 64-bitowym systemie Windows możesz użyć: handle.exe lub handle64.exe

  4. Podwójne kliknięcie znajdź_uchwyt.vbs aby dodać wpis menu kontekstowego w rejestrze. Musisz to zrobić tylko raz. Jeśli jednak przeniesiesz skrypt do innego folderu, musisz ponownie go kliknąć dwukrotnie, aby zaktualizować ścieżkę w rejestrze.
  5. Zobaczysz Znajdź uchwyt opcja po kliknięciu pliku prawym przyciskiem myszy. Kliknięcie go uruchomi skrypt, który z kolei uruchomi handle.exe z argumentem filename, aby znaleźć proces, który ma zablokowany plik.znajdź zablokowany plik procesu - uchwyt sysinternals

Aby usunąć Znajdź uchwyt wpis menu kontekstowego, uruchom Edytor rejestru (regedit.exe) i usuń następujący klucz:

HKEY_CURRENT_USER\Software\Classes\*\shell\FindHandle

4. OpenFiles.exe — wbudowane narzędzie konsoli

Innym wbudowanym narzędziem, którego będziemy używać, jest Openfiles.exe, narzędzie konsoli, które nie jest nowe w systemie Windows. Został pierwotnie wprowadzony w 2000 roku jako część narzędzi Windows Resource Kit 2000/2003. To narzędzie było następnie domyślnie dołączane do systemu Windows Vista i nowszych (w tym Windows 10). Openfiles wyświetla listę aktualnie otwartych plików z folderów lokalnych lub udostępnionych, wraz z identyfikatorem obsługi i nazwą pliku wykonywalnego procesu. To narzędzie pozwala również odłączyć jeden lub więcej plików, które są otwierane zdalnie z udostępnionego folderu.

Włącz globalną flagę „Utrzymaj listę obiektów” po raz pierwszy

Po pierwsze, aby umożliwić śledzenie lokalnych uchwytów plików, musisz włączyć flagę „utrzymaj listę obiektów”, uruchamiając następujące polecenie z wiersza polecenia administratora.

openfiles /lokalnie włączone

Zobaczysz następujący komunikat:

INFORMACJA: Globalna flaga systemowa „utrzymaj listę obiektów” jest obecnie włączona.

Musisz uruchomić to polecenie tylko po raz pierwszy. Następnie uruchom ponownie system Windows, aby zmiana zaczęła obowiązywać.

Wyświetl otwarte pliki i odpowiadające im nazwy procesów

Po ponownym uruchomieniu systemu Windows od Wiersz polecenia administratora okno, typ:

Otwórz pliki

Zawiera on identyfikator pliku/obsługi, nazwę procesu oraz listę plików otwieranych lokalnie lub otwieranych zdalnie za pośrednictwem lokalnych punktów udostępniania w formacie tabeli.

Aby wyświetlić dane wyjściowe w formatach List lub CSV, użyj parametru /query.

openfiles /query /FO LISTA. openfiles /zapytanie /FO CSV

Aby skopiować dane wyjściowe do schowka, potokuj dane wyjściowe do Clip.exe, jak poniżej. Następnie wklej dane wyjściowe w Notatniku lub innym wybranym edytorze.

openfiles |klip
Znajdź, który proces zablokował plik
openfiles /query /FO LISTA |klip. openfiles /query /FO CSV |clip
Znajdź, który proces zablokował plik

Aby uzyskać więcej informacji na temat kopiowania danych wyjściowych wiersza polecenia do schowka lub zapisywania danych wyjściowych do pliku, zapoznaj się z artykułem Jak skopiować tekst wyjściowy wiersza polecenia do schowka lub zapisać do pliku?

Aby sprawdzić, czy dany plik jest używany przez program (i dowiedzieć się, który program), możesz użyć następującego wiersza poleceń.

otwarte pliki | znajdźstr /i 

Przykład:

otwarte pliki | findstr /i eiffel

Powyższe polecenie wyświetla listę wszystkich otwartych plików zawierających słowo „eiffel” w nazwie pliku. W tym przykładzie Word 2016 ma obecnie blokadę pliku „Wieża Eiffla.docx” (ID 4576).

Znajdź, który proces zablokował plik

A okno dialogowe „Plik w użyciu” mówi mi to samo.

Znajdź, który proces zablokował plik

Odłącz pliki otwierane zdalnie od folderu udostępnionego.

Aby odłączyć pliki otwarte od folderu współdzielonego, aby można było je usunąć, zmienić nazwę pliku lub zmodyfikować zawartość, użyj /disconnect parametr, aby wyciąć połączenia z tym plikiem. Oto opcje wiersza poleceń.

OPENFILES /Disconnect [/S system [/U nazwa użytkownika] [/P [hasło]]]] {[/ID ID] [/A dostępny przez] [/O openmode]} [/OP openfile] Opis: Umożliwia administratorowi odłączenie plików i folderów, które zostały otwarte zdalnie za pośrednictwem udostępnionej teczka. Lista parametrów: /S system Określa system zdalny, z którym ma nastąpić połączenie. /U [domena\]użytkownik Określa kontekst użytkownika, w którym polecenie powinno zostać wykonane. /P [haslo] Okresla haslo dla danego kontekstu uzytkownika. /ID id Określa, aby rozłączyć otwarte pliki według identyfikatora pliku. Można użyć symbolu wieloznacznego „*”. /A accessedby Określa rozłączenie wszystkich otwartych plików przez wartość "accessedby". Można użyć symbolu wieloznacznego „*”. /O openmode Określa rozłączenie wszystkich otwartych plików przez wartość „openmode”. Prawidłowe wartości to Odczyt, Zapis lub Odczyt/Zapis. Można użyć symbolu wieloznacznego „*”. /OP openfile Powoduje rozłączenie wszystkich połączeń z otwartym plikiem utworzonych przez określoną nazwę „otwartego pliku”. Można użyć symbolu wieloznacznego „*”. /? Wyświetla ten komunikat pomocy. Przykłady: OPENFILES /Rozłącz /? OPENFILES /Disconnect /ID 1 OPENFILES /Disconnect /A nazwa użytkownika OPENFILES /Disconnect /O Odczyt/zapis OPENFILES /Disconnect /OP "c:\My Documents\somedoc.doc" /ID 234 OPENFILES /Disconnect /S system /U nazwa użytkownika /ID 5 OPENFILES /Disconnect /S system /U nazwa użytkownika /P hasło /ID *

Openfiles.exe doskonale wykonuje zadanie wyświetlania wszystkich otwartych plików wraz z nazwami procesów, ale nie może wymusić zabijania procesów. Jednak to doskonałe (ale przeoczone) wbudowane narzędzie konsoli może się przydać, gdy chcesz szybko znaleźć nazwę procesu, która jest używana plik lub odłączyć plik, do którego użytkownik sieci uzyskuje dostęp za pośrednictwem folderu współdzielonego — bez konieczności polegania na innej firmie rozwiązanie.

5. OtwartePlikiWidok

OtwartePlikiWidok z Nirsoft wyświetla listę wszystkich otwartych plików w twoim systemie. Dla każdego otwartego pliku wyświetlane są dodatkowe informacje: wartość uchwytu, dostęp do odczytu/zapisu/usuwania, pozycja pliku, proces który otworzył plik i nie tylko… Opcjonalnie możesz również zamknąć jeden lub więcej otwartych plików lub zamknąć proces, który je otworzył pliki.

Znajdź, który proces zablokował plik

Możesz zamknąć procesy wybranych plików lub zamknąć wybrane uchwyty plików. Numer uchwytu jest reprezentowany w wartościach szesnastkowych, podczas gdy narzędzie konsoli openfiles.exe pokazuje go w normalnym formacie. To narzędzie pozwala również dodać opcję menu kontekstowego, aby szybko znaleźć proces, który aktualnie używa pliku, za pomocą menu prawego przycisku myszy. Uważam, że opcja menu kontekstowego / obsługa wiersza poleceń jest jedną z najbardziej przydatnych funkcji oferowanych przez OpenedFilesView.


Jedna mała prośba: Jeśli podobał Ci się ten post, udostępnij go?

Jeden „mały” udział od ciebie bardzo pomógłby w rozwoju tego bloga. Kilka świetnych sugestii:
  • Przypiąć!
  • Udostępnij to na swoim ulubionym blogu + Facebooku, Reddit
  • Tweetuj to!
Więc bardzo dziękuję za wsparcie, mój czytelniku. To nie zajmie więcej niż 10 sekund twojego czasu. Przyciski udostępniania znajdują się tuż poniżej. :)

Ezoiczgłoś tę reklamę