Jak odblokować pliki za pomocą handle.exe i nazwy procesu?

8

Próbowałem Unlocker 1.9.1, ale nie działa poprawnie dla mnie na Windows7 (działało dobrze w Windows XP), a także wypróbowałem LockHunter 2.0.2.103 x64 i zgłosiłem błąd, ale .... LockHunter faktycznie odblokowuje plik z GUI, ale nie z linii poleceń.

Więc chcę użyć handle.exe przez SysInternals aby odblokować jeden plik „TestPro.log”. Znam ścieżkę absolutną, jeśli to pomaga. Mogę wyświetlić listę i wszystkie procesy, które zablokowały plik, wykonując

C:\Windows\system32>c:\edutester\progs\handle testpro.log
java.exe           pid: 2120   type: File           338: C:\Users\Public\TestPro
\TestPro Automation Framework\Logs\TestPro.log
java.exe           pid: 1004   type: File           934: C:\Users\Public\TestPro
\TestPro Automation Framework\Logs\TestPro.log

Co muszę wiedzieć, jak automatycznie odblokować plik przy użyciu powyższych informacji z wiersza polecenia . Nie jest możliwa interwencja użytkownika.

  • Windows 7 64bit
  • Microsoft Windows [wersja 6.1.7601]
Radek
źródło

Odpowiedzi:

8

Możesz użyć handle.exeraz, aby wyświetlić listę PID i uchwytów, a następnie ponownie wiele razy, aby zamknąć każdy z nich.

Użyj for /fpolecenia, aby przejrzeć wynik pierwszego polecenia. Nie mam pod ręką komputera z systemem Windows do testowania, ale powinien on wyglądać mniej więcej tak:

Z pliku wsadowego:

for /F "tokens=3,6 delims=: " %%I IN ('handle.exe -accepteula TestPro.log') DO handle.exe -c %%J -y -p %%I

Z wiersza polecenia:

for /F "tokens=3,6 delims=: " %I IN ('handle.exe -accepteula TestPro.log') DO handle.exe -c %J -y -p %I
Stephen Jennings
źródło
Nie mogę sprawić, żeby działało. Twój kod daje mi ('handle.exe was unexpected at this time., myślę, że inwcześniej czegoś brakowało ('handle.exe was unexpected at this time.Ale potem %%J contains : `` to nie jest prawidłowy argument dla handle.exe
Radek
Tak, pamiętam, że miałem problem z prawidłowym wykonaniem polecenia, ale nie pamiętam, co zrobiłem z głowy. Próbuję ponownie uzyskać dostęp do mojego pliku wsadowego, aby móc zaktualizować odpowiedź przy użyciu właściwej składni.
Stephen Jennings
@Radek Zaktualizowałem swoją odpowiedź faktycznym kodem, którego użyłem. Wygląda na to, mam %%Ii %%Jpomieszane i musimy dwukropka jako separatora. Spróbuj tego i zobacz, jak to idzie.
Stephen Jennings,
Działa ładnie (obie wersje pliku wsadowego i wiersza poleceń), jeśli cmd został uruchomiony jako administrator. Masz pomysł, jak sprawić, by działał w ramach nocnych testów automatyzacji? runasw tym przypadku nie działa dla mnie.
Radek
Mam to działa. Sztuczka polega na tym, że polecenie do uruchomienia pod runas to tak naprawdę cmd.exe, a argumentem cmd jest twój kod. Robiłem to bez cmd.
Radek
0

https://technet.microsoft.com/en-us/sysinternals/handle.aspx

TEST I WYŚWIETLACZ:

for /f "tokens=3,6 skip=5 delims=: " %i in ('handle.exe -accepteula notepad.exe') do @echo %i %j                                                                    

WYKONAĆ:

for /f "tokens=3,6 skip=5 delims=: " %i in ('handle.exe -accepteula notepad.exe') do handle.exe -c %j -y -p %i  

WYKONANIE I ZADANIE:

for /f "tokens=3,6 skip=5 delims=: " %i in ('handle.exe -accepteula notepad.exe') do handle.exe -c %j -y -p %i & taskkill /t /f /PID %i                                                       
Alexandre DEFRANCE
źródło
1
Czy możesz rozwinąć tę kwestię i wyjaśnić, w jaki sposób poprawia ona zaakceptowaną odpowiedź ( czterolatka) ?
bertieb
Widzę, że twoje polecenia różnią się od przyjętej odpowiedzi, więc jest to prawidłowa odpowiedź. Jednak, jak wskazał bertieb, twoja odpowiedź wymaga wyjaśnienia, co zrobią twoje polecenia i jak odpowiedzą na pytanie PO. Dziękujemy za udział w SuperUser.
Mówię: Przywróć Monikę
0

Wykonanie z menu kontekstowego bez pliku nietoperza. 1) Umieść plik handle64.exe w C: \ Windows. 2) Utwórz i uruchom skrypt reg

    Windows Registry Editor Version 5.00

    [HKEY_LOCAL_MACHINE\SOFTWARE\Classes\*\shell\WhatBlockFile]
    "Icon"="C:\\ico\\Buttons\\Annotate_Help.ico"
    "MUIVerb"="Что блокирует?"
    "Position"="Top"

    [HKEY_LOCAL_MACHINE\SOFTWARE\Classes\*\shell\WhatBlockFile\command]
    @="C:\\Windows\\system32\\Cmd.exe /c C:\\Windows\\handle64.exe -u \"%1\" & pause"
Garric
źródło