Znajdź proces, który zablokował plik bez narzędzi innych firm

2019-05-05 13:01:39
Główny·Microsoft·Znajdź proces, który zablokował plik bez narzędzi innych firm

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

Są jednak przypadki, w których okno dialogowe „Plik w użyciu” nie wyświetla nazwy procesu, który ma blokadę pliku, który próbujesz usunąć. W niektórych przypadkach okno dialogowe pokaże „działanie nie może zostać zakończone, ponieważ plik jest otwarty w innym procesie ”.

Do badania procesów i zablokowanych plików Windows Sysinternals Process Explorer jest prawdopodobnie pierwszą opcją, która przychodzi na myśl większości użytkowników. Istnieją jednak dwa wbudowane rozwiązania do wyświetlania bieżącej listy otwartych plików wraz z odpowiednimi nazwami procesów.

Znajdź, który proces zablokował plik, używając:

  1. Monitor zasobów (resmon.exe)
  2. Process Explorer firmy Microsoft Sysinternals
  3. Uchwyt z Microsoft Sysinternals
    • Znajdź uchwyt pliku za pomocą menu prawym przyciskiem myszy
  4. Wbudowane narzędzie Openfiles.exe
    • Włącz śledzenie lokalnych uchwytów plików
    • Przeglądaj otwarte pliki i odpowiadające im nazwy procesów
    • Odłącz pliki otwarte z folderów współdzielonych
  5. OpenedFilesView z Nirsoft.net (firma zewnętrzna)

1. Monitor zasobów

Monitor zasobów (resmon.exe) to wbudowane narzędzie, które ma wiele przydatnych funkcji. Za pomocą Monitora zasobów możesz śledzić bieżące wykorzystanie sieci i Internetu, wyświetlać powiązane uchwyty zablokowanych plików, a także zarządzać procesami tak, jak za pomocą Menedżera zadań.

Aby znaleźć nazwę procesu, w którym plik jest zablokowany, kliknij kartę Procesor, wpisz nazwę pliku lub jego część w polu tekstowym Powiązane uchwyty.

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łą przepustowość Internetu? Użyj Resource Monitor, aby go znaleźć

2. Process Explorer

Process Explorer nie wymaga wprowadzenia. W Eksploratorze procesów wszystko, co musisz zrobić, to użyć funkcji Znajdź i wpisać nazwę pliku. Pokazuje proces uzyskiwania dostępu do pliku.

W widoku dolnego panelu możesz zamknąć uchwyt pliku, jeśli to konieczne.

Musisz uruchomić Process Explorer jako administrator, aby zarządzać procesami z podwyższonym poziomem uprawnień. Aby podwyższyć Eksploratora procesów, kliknij menu Plik → Pokaż szczegóły dla wszystkich procesów .

Sprawdź następujące artykuły związane z Process Explorer:

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

3. Obsługa z Windows Sysinternals

Uchwyt to narzędzie firmy Microsoft Sysinternals, które wyświetla informacje o otwartych uchwytach dla 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. Uchwyt jest jak wersja wiersza polecenia Process Explorer.

Uwaga: uchwyt v4.21 ma mały błąd, w którym zawsze zgłasza „Nie znaleziono pasujących uchwytów”, jeśli litera dysku jest zapisana wielkimi literami. Mam nadzieję, że Microsoft naprawi to w następnej aktualizacji.

W oknie wiersza polecenia administratora użyj składni wiersza polecenia, aby znaleźć proces, w którym plik jest otwarty:

 handle.exe -a -u nazwa_pliku ze ścieżką 

Jeśli nazwa pliku zawiera spacje, umieść go w cudzysłowie.

Przykład:

 handle.exe -a -u "c: \ users \ ramesh \ desktop \ Mandate-form.pdf" 

(Wzmianka o nazwie pliku bez ścieżki może nie działać w każdej sytuacji. Zaleca się zawsze podawanie pełnej ścieżki).

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

Sysinternals Handle: Argumenty wiersza polecenia

 użycie: uchwyt [[-a [-l]] [-u] | [-c [-y]] | [-s]] [-p |] [name] [-nobanner] 
-zaZrzuć wszystkie informacje o uchwytach.
-lPo prostu pokaż uchwyty sekcji z plikiem strony.
-doZamyka określony uchwyt (interpretowany jako liczba szesnastkowa).
Musisz określić proces za pomocą jego PID. OSTRZEŻENIE: Zamykanie uchwytów może powodować niestabilność aplikacji lub systemu.
-yNie pytaj o potwierdzenie zamknięcia rączki.
-sLiczba wydruków każdego typu otwartego uchwytu.
-uPokaż nazwę użytkownika będącego właścicielem podczas wyszukiwania uchwytów.
-pUchwyty zrzutu należące do procesu (zaakceptowano częściową nazwę).
imięWyszukaj uchwyty do obiektów za pomocą (fragment zaakceptowany).
-nobannerNie wyświetlaj banera startowego i komunikatu o prawach autorskich.

Żadne argumenty nie zrzucą wszystkich odniesień do plików.

Dodaj uchwyt Sysinternals do menu po kliknięciu prawym przyciskiem myszy

Możesz dodać Sysinternals Handle do menu po kliknięciu prawym przyciskiem myszy, aby szybko znaleźć program, który zablokował plik. Aby dodać go do menu kontekstowego, wykonaj następujące kroki:

  1. Pobierz Uchwyt z witryny Microsoft Sysinternals.
  2. Skopiuj pliki handle.exe i handle64.exe do folderu - np. d:\tools
  3. Skopiuj następujące wiersze kodu do Notatnika i zapisz plik jako find_handle.vbs w stałej lokalizacji.
     „Uruchamia narzędzie Sysinternals Handle.exe z argumentem nazwy 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 opcji systemu Windows 10 Jawne przyciemnienie objShell, WshShell, objFSO, sBaseKey, sFilename Set objShell = CreateObject („Shell.Application”) Set WshShell = CreateObject („WScript.Shell”) Set objFSO = CreateObject („Scripting.FileSystemObject”) Jeśli WScript.Arguments.Count = 0 Następnie sBaseKey = „HKCU \ Oprogramowanie \ Klasy \ * \ shell \ "WshShell.RegWrite sBaseKey &" FindHandle \ ", " Find Handle ", " REG_SZ "WshShell.RegWrite sBaseKey &" FindHandle \ command \ ", " wscript.exe "i" "" " _ WScript.ScriptFullName & "" "" & "" & "" "" & "% 1" & "" "", "REG_SZ" Else If objFSO.FileExists (WScript.Arguments (0)) = True Następnie sFilename = lcase (WScript.Arguments (0)) objShell.ShellExecute "cmd.exe", "/kd:\tools\handle.exe -a -u" & _ "" "" & sFilename & "" ", " ", " runas ”, 1 End If End If 

    Uwaga: Ścieżka Sysinternals Handle.exe jest zapisana na stałe jako d:\tools\handle.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żna użyć pliku handle.exe lub handle64.exe

  4. Kliknij dwukrotnie find_handle.vbs aby dodać pozycję menu kontekstowego w rejestrze. Musisz to zrobić tylko raz. Ale jeśli przeniesiesz skrypt do innego folderu, musisz dwukrotnie kliknąć go ponownie, aby zaktualizować ścieżkę w rejestrze.
  5. Zobaczysz opcję Znajdź uchwyt po kliknięciu pliku prawym przyciskiem myszy. Kliknięcie go uruchomi skrypt, który z kolei uruchomi uchwyt.exe z argumentem nazwa pliku, aby znaleźć proces, w którym plik został zablokowany.

Aby usunąć pozycję menu kontekstowego Znajdź uchwyt, 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 nowością w systemie Windows. Został pierwotnie wprowadzony w 2000 roku jako część narzędzi Windows Resource Kit 2000/2003. To narzędzie zostało następnie domyślnie dołączone do systemu Windows Vista i nowszych (w tym Windows 10). Openfiles wyświetla aktualnie otwartą listę plików z folderów lokalnych lub udostępnionych, wraz z identyfikatorem uchwytu i nazwą pliku wykonywalnego procesu. To narzędzie pozwala również odłączyć jeden lub więcej plików otwieranych zdalnie z folderu współdzielonego.

Po raz pierwszy włącz globalną flagę „Zachowaj listę obiektów”

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

 openfiles / local on 

Zobaczysz następujący komunikat:

INFORMACJE: Systemowa flaga globalna „zachowaj 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ć.

Przeglądaj otwarte pliki i odpowiadające im nazwy procesów

Po ponownym uruchomieniu systemu Windows w oknie wiersza polecenia administratora wpisz:

 Otwórz pliki 

Lista zawiera identyfikator pliku / uchwytu, nazwę procesu oraz listę plików otwieranych lokalnie lub zdalnie za pośrednictwem lokalnych punktów udostępniania w formacie tabeli.

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

 openfiles / query / FO LIST openfiles / query / 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 do Notatnika lub dowolnego innego edytora do wyboru.

 plik open | 

 openfiles / query / FO LIST | clip openfiles / query / FO CSV | clip 

Aby uzyskać więcej informacji na temat kopiowania danych wyjściowych z wiersza polecenia do schowka lub zapisać dane wyjściowe w pliku, zapoznaj się z artykułem Jak skopiować tekst z wiersza polecenia do schowka lub zapisać w 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 polecenia.

 pliki otwarte | findstr / i 

Przykład:

 pliki otwarte | findstr / i eiffel 

Powyższe polecenie wyświetla wszystkie otwarte pliki, które zawierają słowo „eiffel” w nazwie pliku. W tym przykładzie program Word 2016 ma obecnie blokadę pliku „Wieża Eiffla.docx” (ID 4576).

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

Odłącz pliki otwarte zdalnie z udostępnionego folderu.

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

 OPENFILES / Disconnect [/ S system [/ U nazwa użytkownika [/ P [hasło]]]] {[/ ID id] [/ A accessbyby] [/ O openmode]} [/ OP openfile] Opis: Umożliwia administratorowi rozłączenie plików oraz foldery, które zostały otwarte zdalnie poprzez folder współdzielony. Lista parametrów: / S system Określa system zdalny, z którym należy się połączyć. / U [domena \] użytkownik Określa kontekst użytkownika, w którym polecenie powinno zostać wykonane. / P [hasło] Określa hasło dla danego kontekstu użytkownika. / ID id Określa rozłączanie otwartych plików według identyfikatora pliku. Można użyć symbolu wieloznacznego „*”. / A accessbyby Określa rozłączanie wszystkich otwartych plików według wartości „accesssedby”. Można użyć symbolu wieloznacznego „*”. / O openmode Określa rozłączanie wszystkich otwartych plików według wartości „openmode”. Prawidłowe wartości to Odczyt, Zapis lub Odczyt / Zapis. Można użyć symbolu wieloznacznego „*”. / OP openfile Określa rozłączanie wszystkich otwartych połączeń plików utworzonych przez określoną nazwę „otwartego pliku”. Można użyć symbolu wieloznacznego „*”. /? Wyświetla ten komunikat pomocy. Przykłady: OPENFILES / Disconnect /? 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 / identyfikator 5 OPENFILES / Disconnect / S system / U nazwa użytkownika / P hasło / ID * 

Openfiles.exe doskonale wykonuje listę wszystkich otwartych plików wraz z nazwami procesów, ale nie może wymusić zabicia procesów. Jednak to doskonałe (ale przeoczone) wbudowane narzędzie konsoli może się przydać, gdy chcesz szybko znaleźć nazwę procesu korzystającą z pliku lub odłączyć plik, do którego użytkownik sieciowy uzyskuje dostęp za pośrednictwem folderu udostępnionego - niezależnie od na rozwiązaniu innej firmy.

5. OpenedFilesView

OpenedFilesView z Nirsoft wyświetla listę wszystkich otwartych plików w twoim systemie. Dla każdego otwartego pliku wyświetlane są dodatkowe informacje: obsługa wartości, dostęp do odczytu / zapisu / usuwania, pozycja pliku, proces, który otworzył plik, i więcej… Opcjonalnie możesz także zamknąć jeden lub więcej otwartych plików lub zamknąć proces, który otworzył te pliki.

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 prawym przyciskiem myszy. Uważam, że opcja menu kontekstowego / obsługa wiersza poleceń jest jedną z najbardziej przydatnych funkcji oferowanych przez OpenedFilesView.

Wybór Redakcji