Finn hvilken prosess som har låst en fil uten verktøy fra tredjepart

2019-05-05 13:01:39
Hoved~~Pos=Trunc·Microsoft·Finn hvilken prosess som har låst en fil uten verktøy fra tredjepart

Når du prøver å slette en fil eller mappe som er i bruk av en prosess, vises dialogboksen File In Use som viser navnet på programmet som har låst filen.

Imidlertid er det tilfeller hvor "File In Use" -dialogen ikke viser navnet på prosessen som har en lås på filen du prøver å slette. I noen tilfeller vil dialogen vise "handlingen kan ikke fullføres fordi filen er åpen i en annen prosess ".

For å undersøke prosesser og låste filer er Windows Sysinternals Process Explorer trolig det første alternativet som kommer til tankene for de fleste brukere. Det er imidlertid to innebygde løsninger for å vise den nåværende listen over åpne filer sammen med tilhørende prosessnavn.

Finn hvilken prosess som har låst en fil ved å bruke:

  1. Resource Monitor (resmon.exe)
  2. Prosess Explorer fra Microsoft Sysinternals
  3. Håndtak fra Microsoft Sysinternals
    • Finn filhåndtering via høyreklikkmenyen
  4. Openfiles.exe innebygd konsollverktøy
    • Aktiver sporing av lokale filhåndtak
    • Vis åpne filer og de tilhørende prosessnavnene
    • Koble fra filer som er åpnet fra delte mapper
  5. OpenedFilesView fra Nirsoft.net (3. parti)

1. Ressursmonitor

Resource Monitor (resmon.exe) er et innebygd verktøy som har mange nyttige funksjoner. Med Resource Monitor kan du spore gjeldende nettverks- og internettbruk, se tilknyttede håndtak for låste filer, samt administrere prosesser akkurat som du vil bruke Task Manager.

For å finne prosessnavnet som har en fil låst, klikker du på CPU-fanen, skriver inn filnavnet eller deler av det i tekstboksen Associated Handles.

Vi har dekket Resource Monitor tidligere. Sjekk ut disse artiklene:

  • Hvordan bruke ressursmonitor for å finne hvilken prosess som har låst en fil?
  • Hvilket program bruker all din internettbåndbredde? Bruk Resource Monitor for å finne den

2. Prosess Explorer

Process Explorer trenger ingen introduksjon. I Process Explorer er alt du trenger å gjøre å bruke funksjonen Finn og skriv inn filnavnet. Dette viser prosessen som får tilgang til filen.

Fra den nedre ruten kan du lukke filhåndtaket om nødvendig.

Du må kjøre Process Explorer som administrator for å kunne administrere prosesser som kjører forhøyet. Hvis du vil heve prosessutforsker, klikker du på Fil-menyen → Vis detaljer for alle prosesser .

Sjekk ut disse Process Explorer-relaterte artiklene:

  • Hvordan slette en sta, ikke-slettbar fil eller mappe i Windows?
  • Finn hvilket program som bruker webkameraet ditt for øyeblikket
  • Hvordan finne hvilket program som forårsaket en ukjent feilmelding?
  • Hva betyr mislyktes i å oppregne objekter i containeren?

3. Håndtak fra Windows Sysinternals

Handle er et verktøy fra Microsoft Sysinternals som viser informasjon om åpne håndtak for enhver prosess i systemet. Du kan bruke den til å se programmene som har en fil åpen, eller for å se objekttypene og navnene på alle håndtakene til et program. Håndtak er som en kommandolinjeversjon av Process Explorer.

Merk: Håndtak v4.21 har en liten feil der det alltid rapporteres “Ingen samsvarende håndtak funnet” hvis stasjonsbokstaven er med store bokstaver. Håper Microsoft fikser det i neste oppdatering.

Fra et kommandotolptvindu bruker du kommandolinjens syntaks for å finne prosessen som har filen åpen:

 handle.exe -a -u filnavn_med_sti 

Hvis filnavnet inneholder mellomrom, legg det ved dobbelt sitater.

Eksempel:

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

(Å nevne filnavnet uten banen kan ikke nødvendigvis fungere i alle situasjoner. Det anbefales at du alltid inkluderer hele banen.)

Utgangen viser prosessnavn, prosessidentifikator, brukernavn, det låste (mål) filnavnet med banen.

Sysinternals Handle: Kommandolinjeargumenter

 bruk: håndtere [[-a [-l]] [-u] | [-c [-y]] | [-s]] [-p |] [navn] [-nobanner] 
-enDump all informasjon om håndtaket.
lBare vis håndtak med sidefiler.
-cLukker det spesifiserte håndtaket (tolket som et heksadesimal nummer).
Du må spesifisere prosessen ved PID-en. ADVARSEL: Lukkehåndtak kan forårsake applikasjons- eller systemstabilitet.
-yIkke be om bekreftelse på tett håndtak.
-sSkriv ut antall av hver type håndtak som er åpen.
-uVis det eier av brukernavnet når du søker etter håndtak.
-pDumpehåndtak som tilhører prosess (delvis navn akseptert).
NavnSøk etter håndtak til objekter med (fragment akseptert).
-nobannerIkke vis oppstartsbanneret og copyright-meldingen.

Ingen argumenter vil dumpe alle filreferanser.

Legg til Sysinternals Handle til å høyreklikke på menyen

Du kan legge til Sysinternals Handle til høyreklikkmenyen for filer for raskt å finne programmet som har låst filen. Følg disse trinnene for å legge den til hurtigmenyen:

  1. Last ned håndtaket fra Microsoft Sysinternals nettsted.
  2. Kopier filene handle.exe & handle64.exe til en mappe - f.eks. d:\tools
  3. Kopier følgende kodelinjer til Notisblokk, og lagre filen som find_handle.vbs til et permanent sted.
     'Kjører Sysinternals Handle.exe-verktøyet med filnavn-argument. '© Ramesh Srinivasan - https://winhelponline.com/blog' Opprettet dato: 29. mars 2008 'Oppdatert dato: 11. juni 2019' For alle versjoner av Windows, inkludert Windows 10 Option Explicit Dim objShell, WshShell, objFSO, sBaseKey, sFilename Set objShell = CreateObject ("Shell.Application") Angi WshShell = CreateObject ("WScript.Shell") Sett objFSO = CreateObject ("Scripting.FileSystemObject") Hvis WScript.Arguments.Count = 0 Så sBaseKey = "HKCU \ Programvare \ Classes \ * \ shell \ "WshShell.RegWrite sBaseKey &" FindHandle \ ", " Find Handle ", " REG_SZ "WshShell.RegWrite sBaseKey &" FindHandle \ command \ ", " wscript.exe "&" "" & _ WScript.ScriptFullName & "" "" & "" & "" "" & "% 1" & "" ", " REG_SZ "Ellers Hvis objFSO.FileExists (WScript.Arguments (0)) = True Then sFilename = lcase (WScript.Arguments (0)) objShell.ShellExecute "cmd.exe", "/kd:\tools\handle.exe -a -u" & _ "" "" & sFilename & "" ", " ", " runas ", 1 End If End If 

    Merk: Sysinternals Handle.exe-banen er hardkodet som d:\tools\handle.exe i skriptet over. Hvis programmet ligger på en annen bane, endrer du banen i skriptet tilsvarende. For 64-biters Windows kan du bruke handle.exe eller handle64.exe

  4. Dobbeltklikk på find_handle.vbs å legge til kontekstmenyoppføringen i registeret. Du må gjøre dette bare en gang. Men hvis du flytter skriptet til en annen mappe, må du dobbeltklikke på det igjen for å oppdatere banen i registeret.
  5. Du vil se alternativet Finn håndtak når du høyreklikker på en fil. Hvis du klikker på det, startes skriptet som igjen kjører handle.exe med filnavnsargumentet for å finne prosessen som har filen låst.

Hvis du vil fjerne oppføringen for Finn håndtak- kontekstmenyen, starter du Registerredigering ( regedit.exe ) og sletter følgende tast:

 HKEY_CURRENT_USER \ Software \ Classes \ * \ shell \ FindHandle 

4. OpenFiles.exe - et innebygd konsollverktøy

Et annet innebygd verktøy vi skal bruke er Openfiles.exe, et konsollverktøy som ikke er nytt for Windows. Det ble opprinnelig introdusert i 2000 som en del av Windows Resource Kit 2000/2003-verktøyene. Dette verktøyet ble da inkludert som standard i Windows Vista og nyere (inkludert Windows 10). Openfiles viser listen over for øyeblikket åpne filer fra lokale eller delte mapper, sammen med håndterings-ID og prosessens kjørbare navn. Dette verktøyet lar deg også koble fra en eller flere filer som åpnes eksternt fra en delt mappe.

Aktiver global flagg for "Opprettholde objekter" for første gang

For det første, for å aktivere sporing av lokale filhåndtak, må du slå på "opprettholde objekter-listen" ved å kjøre følgende kommando fra admin Command Prompt.

 openfiles / lokalt på 

Følgende melding vises:

INFO: Systemets globale flagg 'vedlikeholde objekter-liste' er for øyeblikket aktivert.

Du må kun kjøre denne kommandoen for første gang. Start deretter Windows på nytt for at endringen skal tre i kraft.

Vis åpne filer og de tilhørende prosessnavnene

Etter å ha startet på nytt Windows, skriver du fra et admin-ledetekstvindu.

 openfiles 

Dette viser fil / håndterings-ID, prosessnavn og listen over filer som er åpnet lokalt eller åpnet eksternt via lokale delepunkter, i et tabellformat.

For å se utdataene i Liste- eller CSV-formater, bruk parameteren / spørring.

 openfiles / query / FO LIST openfiles / query / FO CSV 

For å kopiere utdata til utklippstavle, rør du utdriften til Clip.exe som nedenfor. Lim deretter inn utdataene i Notisblokk eller en annen redigerer du ønsker.

 openfiles | klipp 

 openfiles / query / FO LIST | klipp openfiles / query / FO CSV | klipp 

Hvis du vil ha mer informasjon om å kopiere Command Prompt-utdata til utklippstavle eller lagre utdataene i en fil, kan du sjekke artikkelen Hvordan kopiere Command Prompt Output-tekst til utklippstavlen eller lagre til fil?

For å finne ut om en bestemt fil brukes av et program (og å vite hvilket program), kan du bruke følgende kommandolinje.

 openfiles | findstr / i 

Eksempel:

 openfiles | findstr / i eiffel 

Kommandoen ovenfor viser alle åpne filer som inneholder ordet "eiffel" i filnavnet. I dette eksemplet har Word 2016 for øyeblikket låsen over filen “Eiffeltårnet.docx” (ID 4576).

Og "File In Use" -dialogen forteller meg det samme.

Koble fra filer som er åpnet eksternt fra den delte mappen.

For å koble fra filer som er åpnet fra delt mappe slik at du kan slette, gi nytt navn til filen eller endre innholdet, bruker du parameteren /disconnect å kutte tilkoblinger til den filen. Her er kommandolinjealternativene.

 OPENFILES / Koble fra [/ S system [/ U brukernavn [/ P [passord]]]]] [[/ ID-ID] [/ A accessedby] [/ O openmode]} [/ OP openfile] Beskrivelse: Gjør det mulig for en administrator å koble fra filer og mapper som er åpnet eksternt gjennom en delt mappe. Parameterliste: / S-system Angir fjernsystemet du vil koble til. / U [domene \] bruker Angir brukersammenheng som kommandoen skal utføres under. / P [passord] Angir passordet for den gitte brukersammenheng. / ID-ID Spesifiserer for å koble fra åpne filer etter fil-ID. Jokertegnet "*" kan brukes. / A accessedby Spesifiserer for å koble fra alle åpne filer med "accessedby" -verdi. Jokertegnet "*" kan brukes. / O openmode Spesifiserer for å koble fra alle åpne filer med "openmode" -verdi. Gyldige verdier er Les, Skriv eller Les / Skriv. Jokertegnet "*" kan brukes. / OP openfile Spesifiserer for å koble fra alle åpne filtilkoblinger opprettet med et spesifikt "åpen fil" -navn. Jokertegnet "*" kan brukes. /? Viser denne hjelpemeldingen. Eksempler: OPENFILES / Disconnect /? OPENFILES / Disconnect / ID 1 OPENFILES / Disconnect / A username OPENFILES / Disconnect / O Les / Skriv OPENFILES / Disconnect / OP "c: \ My Documents \ somedoc.doc" / ID 234 OPENFILES / Disconnect / S system / U username / ID 5 OPENFILES / Koble fra / S system / U brukernavn / P passord / ID * 

Openfiles.exe gjør jobben med å liste alle åpne filer sammen med prosessnavn, men den kan ikke drepe prosesser med tvang. Imidlertid kan dette utmerkede (men oversett) innebygde konsollverktøyet komme til nytte når du raskt vil finne et prosessnavn som bruker en fil, eller for å koble fra en fil som blir tilgang til via en delt mappe av en nettverksbruker - uten å avhenge på en tredjepartsløsning.

5. OpenedFilesView

OpenedFilesView fra Nirsoft viser listen over alle åpnede filer på systemet ditt. For hver åpnet fil vises tilleggsinformasjon: håndtere verdi, lese / skrive / slette tilgang, filposisjon, prosessen som åpnet filen, og mer… Eventuelt kan du også lukke en eller flere åpnede filer, eller lukke prosessen som åpnet disse filene.

Du kan lukke prosesser med valgte filer eller lukke valgte filhåndtak. Håndtaknummeret er representert i sekskantverdier, mens openfiles.exe konsollverktøy viser det i normalt format. Dette verktøyet lar deg også legge til et kontekstmenyvalg for raskt å finne prosessen som nå bruker en fil, via høyreklikkmenyen. Kontekstmenyalternativet / kommandolinjestøtten, anser jeg, er en av de mest nyttige funksjonene som tilbys av OpenedFilesView.

Redaksjonens