프로세스에서 사용중인 파일 또는 폴더를 삭제하려고하면 파일을 잠근 프로그램의 이름을 표시하는 사용중인 파일 대화 상자가 나타납니다.
그러나 "사용중인 파일"대화 상자에 삭제하려는 파일에 잠금이있는 프로세스 이름이 표시되지 않는 경우가 있습니다. 경우에 따라 대화 상자에 "파일이 다른 프로세스 에서 열려있어 작업을 완료 할 수 없습니다"가 표시됩니다.
프로세스 및 잠긴 파일을 조사 할 때 Windows Sysinternals Process Explorer는 아마도 대부분의 사용자에게 가장 먼저 떠오르는 옵션입니다. 그러나 현재 열린 파일 목록을 해당 프로세스 이름과 함께 표시하는 두 가지 기본 제공 솔루션 이 있습니다.
다음을 사용하여 파일을 잠근 프로세스를 찾으십시오.
- 리소스 모니터 (resmon.exe)
- Microsoft Sysinternals의 프로세스 탐색기
- Microsoft Sysinternals에서 처리
- 마우스 오른쪽 버튼 클릭 메뉴를 통해 파일 핸들 찾기
- Openfiles.exe 내장 콘솔 도구
- 로컬 파일 핸들 추적 사용
- 열린 파일 및 해당 프로세스 이름을 봅니다.
- 공유 폴더에서 열린 파일 연결 끊기
- Nirsoft.net에서 열린 파일보기 (타사)
1. 리소스 모니터
리소스 모니터 (resmon.exe)는 유용한 기능이 많이있는 기본 제공 도구입니다. 리소스 모니터를 사용하면 현재 네트워크 및 인터넷 사용을 추적하고 잠긴 파일에 대한 관련 핸들을보고 작업 관리자를 사용하는 것처럼 프로세스를 관리 할 수 있습니다.
파일이 잠긴 프로세스 이름을 찾으려면 CPU 탭을 클릭하고 연관된 핸들 텍스트 상자에 파일 이름 또는 그 일부를 입력하십시오.
앞서 리소스 모니터를 다뤘습니다. 다음 기사를 확인하십시오.
- 리소스 모니터를 사용하여 파일을 잠근 프로세스를 찾는 방법은 무엇입니까?
- 어떤 프로그램이 모든 인터넷 대역폭을 사용하고 있습니까? 리소스 모니터를 사용하여 찾기
2. 프로세스 탐색기
프로세스 탐색기는 소개 할 필요가 없습니다. 프로세스 탐색기에서 찾기 기능을 사용하고 파일 이름을 입력하기 만하면됩니다. 파일에 액세스하는 프로세스를 보여줍니다.
하단 분할 창보기에서 필요한 경우 파일 핸들을 닫을 수 있습니다.
관리자 권한으로 실행중인 프로세스를 관리하려면 프로세스 탐색기를 관리자로 실행해야합니다. 프로세스 탐색기를 높이려면 파일 메뉴 → 모든 프로세스에 대한 세부 사항 표시를 클릭하십시오.
다음 프로세스 탐색기 관련 기사를 확인하십시오.
- Windows에서 완고한 삭제 불가능한 파일 또는 폴더를 삭제하는 방법?
- 현재 웹캠을 사용중인 프로그램 찾기
- 알 수없는 오류 메시지가 발생한 프로그램을 찾는 방법은 무엇입니까?
- 컨테이너에서 객체를 열거하지 못한 것은 무엇을 의미합니까?
3. Windows Sysinternals에서 처리
Handle은 시스템의 모든 프로세스에 대해 열린 핸들에 대한 정보를 표시하는 Microsoft Sysinternals의 유틸리티입니다. 파일을 열어 놓은 프로그램을 보거나 프로그램의 모든 핸들의 객체 유형과 이름을 볼 수 있습니다. 핸들은 프로세스 탐색기의 명령 행 버전과 같습니다.
참고 : 핸들 v4.21에는 드라이브 문자가 대문자 인 경우 항상 "일치하는 핸들이 없습니다"라는 작은 버그가 있습니다. Microsoft가 다음 업데이트에서이 문제를 해결하기를 바랍니다.
admin 명령 프롬프트 창에서 명령 행 구문을 사용하여 파일을 연 프로세스를 찾으십시오.
handle.exe -a -u 파일 이름 _with_path
파일 이름에 공백이 있으면 큰 따옴표로 묶으십시오.
예:
handle.exe -a -u "c : \ users \ ramesh \ desktop \ Mandate-form.pdf"
(경로없이 파일 이름을 언급하는 것이 모든 상황에서 반드시 작동하는 것은 아닙니다. 항상 전체 경로를 포함하는 것이 좋습니다.)
출력에는 프로세스 이름, 프로세스 식별자, 사용자 이름, 잠긴 (대상) 파일 이름과 경로가 표시됩니다.
Sysinternals 핸들 : 명령 줄 인수
사용법 : 처리 [[-a [-l]] [-u] | [-c [-y]] | [-s]] [-p |] [이름] [-nobanner]
-ㅏ | 모든 핸들 정보를 덤프하십시오. |
-엘 | 페이지 파일 지원 섹션 핸들 만 표시하십시오. |
-씨 | 지정된 핸들을 닫습니다 (16 진 숫자로 해석 됨). PID로 프로세스를 지정해야합니다. 경고 : 핸들을 닫으면 응용 프로그램이나 시스템이 불안정해질 수 있습니다. |
-와이 | 핸들 닫기 확인 메시지를 표시하지 마십시오. |
-에스 | 열려있는 각 유형의 핸들 수를 인쇄합니다. |
-유 | 핸들을 검색 할 때 소유 한 사용자 이름을 표시하십시오. |
-피 | 프로세스에 속하는 덤프 핸들 (부분 이름이 허용됨). |
이름 | (조각 허용)으로 객체 핸들을 검색합니다. |
-배너 | 시작 배너 및 저작권 메시지를 표시하지 마십시오. |
인수가 모든 파일 참조를 덤프하지 않습니다.
마우스 오른쪽 버튼 클릭 메뉴에 Sysinternals Handle 추가
파일의 오른쪽 클릭 메뉴에 Sysinternals Handle을 추가하여 파일을 잠근 프로그램을 빠르게 찾을 수 있습니다. 상황에 맞는 메뉴에 추가하려면 다음 단계를 수행하십시오.
- Microsoft Sysinternals 사이트에서 핸들을 다운로드하십시오.
- handle.exe 및 handle64.exe 파일을 폴더에 복사하십시오 (예
d:\tools
- 다음 코드 줄을 메모장에 복사하고 파일을
find_handle.vbs
로 영구적 인 위치에 저장하십시오.'파일 이름 인수를 사용하여 Sysinternals Handle.exe 유틸리티를 실행합니다. '© Ramesh Srinivasan-https://winhelponline.com/blog'작성 날짜 : 2008 년 3 월 29 일 '업데이트 날짜 : 2019 년 6 월 11 일'Windows 10 Option Explicit Dim objShell, WshShell, objFSO를 포함한 모든 버전의 Windows sBaseKey, sFilename objShell = CreateObject ( "Shell.Application") 설정 WshShell = CreateObject ( "WScript.Shell") objFSO = CreateObject ( "Scripting.FileSystemObject") 설정 WScript.Arguments.Count = 0 인 경우 sBaseKey = "HKCU \ Software \ Classes \ * \ shell \ "WshShell.RegWrite sBaseKey &"FindHandle \ ", "Find Handle ", "REG_SZ "WshShell.RegWrite sBaseKey &"FindHandle \ command \ ", "wscript.exe "&" "" "& _ WScript.ScriptFullName & "" ""& ""& "" ""& "% 1"& "" "", "REG_SZ"기타 objFSO.FileExists (WScript.Arguments (0)) = True 인 경우 sFilename = lcase (WScript.Arguments (0)) objShell.ShellExecute "cmd.exe", "/kd:\tools\handle.exe -a -u"& _ "" ""& sFilename & "" "", "", " runas ", 1 끝면 종료 끝
참고 : Sysinternals Handle.exe 경로는 위 스크립트에서
d:\tools\handle.exe
로 하드 코딩되어 있습니다. 프로그램이 다른 경로에있는 경우 그에 따라 스크립트의 경로를 수정하십시오. 64 비트 Windows의 경우 handle.exe 또는 handle64.exe를 사용할 수 있습니다. find_handle.vbs
를 두 번 클릭하여 레지스트리에 컨텍스트 메뉴 항목을 추가하십시오. 이 작업은 한 번만 수행하면됩니다. 그러나 스크립트를 다른 폴더로 재배치하는 경우 다시 두 번 클릭하여 레지스트리의 경로를 업데이트해야합니다.- 파일을 마우스 오른쪽 버튼으로 클릭하면 핸들 찾기 옵션이 표시됩니다. 그것을 클릭하면 스크립트가 실행되어 파일 이름 인수와 함께 handle.exe를 실행하여 파일이 잠긴 프로세스를 찾습니다.
핸들 찾기 컨텍스트 메뉴 항목을 제거하려면 레지스트리 편집기 ( regedit.exe
)를 시작하고 다음 키를 삭제하십시오.
HKEY_CURRENT_USER \ Software \ Classes \ * \ shell \ FindHandle
4. OpenFiles.exe — 내장 콘솔 도구
우리가 사용할 또 다른 기본 제공 도구는 Windows에 익숙하지 않은 콘솔 도구 인 Openfiles.exe입니다. 원래 Windows Resource Kit 2000/2003 도구의 일부로 2000 년에 도입되었습니다. 이 유틸리티는 기본적으로 Windows Vista 이상 (Windows 10 포함)에 포함되었습니다. Openfiles에는 로컬 또는 공유 폴더에서 현재 열려있는 파일 목록과 핸들 ID 및 프로세스 실행 파일 이름이 표시됩니다. 이 도구를 사용하면 공유 폴더에서 원격으로 열린 하나 이상의 파일을 분리 할 수 있습니다.
“오브젝트 유지 관리”글로벌 플래그를 처음으로 활성화
먼저 로컬 파일 핸들을 추적하려면 admin 명령 프롬프트에서 다음 명령을 실행하여 'maintain objects list'플래그를 설정해야합니다.
openfiles / local on
다음과 같은 메시지가 나타납니다.
정보 : 시스템 전역 플래그 'maintain objects list'가 현재 활성화되어 있습니다.
이 명령은 처음으로 만 실행해야합니다. 그런 다음 변경 사항을 적용하려면 Windows를 다시 시작하십시오.
열린 파일 및 해당 프로세스 이름을 봅니다.
Windows를 다시 시작한 후 admin 명령 프롬프트 창에서 다음을 입력하십시오.
열린 파일
여기에는 파일 / 핸들 ID, 프로세스 이름 및 로컬 공유 지점을 통해 원격으로 열거 나 파일 형식을 표 형식으로 나열합니다.
출력을 List 또는 CSV 형식으로 보려면 / query 매개 변수를 사용하십시오.
openfiles / query / FO LIST openfiles / query / FO CSV
출력을 클립 보드로 복사하려면 아래와 같이 출력을 Clip.exe로 파이프하십시오. 그런 다음 출력을 메모장이나 선택한 다른 편집기에 붙여 넣습니다.
열린 파일 | 클립
openfiles / query / FO LIST | 클립 openfiles / query / FO CSV 클립 |
명령 프롬프트 출력을 클립 보드에 복사하거나 출력을 파일에 저장하는 방법에 대한 자세한 내용은 명령 프롬프트 출력 텍스트를 클립 보드에 복사하거나 파일에 저장하는 방법 문서를 참조 하십시오.
특정 파일이 프로그램에서 사용 중인지 확인하고 어떤 프로그램을 알기 위해 다음 명령 줄을 사용할 수 있습니다.
openfiles | findstr / i
예:
openfiles | findstr / i 에펠
위의 명령은 파일 이름에 "eiffel"이라는 단어가 포함 된 모든 열린 파일을 나열합니다. 이 예에서 Word 2016은 현재 "The Eiffel Tower.docx"파일을 잠그고 있습니다 (ID 4576).
그리고“File In Use”대화 상자도 같은 것을 알려줍니다.
공유 폴더에서 원격으로 열린 파일의 연결을 끊습니다.
공유 폴더에서 열린 파일의 연결을 끊어 파일을 삭제하거나 파일 이름을 바꾸거나 내용을 수정하려면 /disconnect
매개 변수를 사용하여 해당 파일에 대한 연결을 /disconnect
. 명령 행 옵션은 다음과 같습니다.
OPENFILES / Disconnect [/ S 시스템 [/ U 사용자 이름 [/ P [암호]]]] {[/ ID id] [/ A 액세스 한 사람] [/ O openmode]} [/ OP openfile] 설명 : 관리자가 파일 연결을 끊을 수 있습니다 공유 폴더를 통해 원격으로 열린 폴더. 매개 변수 목록 : / S system 연결할 원격 시스템을 지정합니다. / U [domain \] user 명령을 실행할 사용자 컨텍스트를 지정합니다. / P [암호] 지정된 사용자 컨텍스트의 암호를 지정합니다. / ID id 파일 ID로 열린 파일의 연결을 끊도록 지정합니다. "*"와일드 카드가 사용될 수 있습니다. / Aaccessby "accessedby"값으로 열려있는 모든 파일의 연결을 끊도록 지정합니다. "*"와일드 카드가 사용될 수 있습니다. / O openmode "openmode"값으로 열려있는 모든 파일의 연결을 끊도록 지정합니다. 유효한 값은 읽기, 쓰기 또는 읽기 / 쓰기입니다. "*"와일드 카드가 사용될 수 있습니다. / OP openfile 특정 "열린 파일"이름으로 만들어진 열려있는 모든 파일 연결을 끊도록 지정합니다. "*"와일드 카드가 사용될 수 있습니다. /? 이 도움말 메시지를 표시합니다. 예 : OPENFILES / Disconnect /? OPENFILES / Disconnect / ID 1 OPENFILES / Disconnect / A username OPENFILES / Disconnect / O OPENFILES / Disconnect / OP "c : \ My Documents \ somedoc.doc"/ ID 234 OPENFILES / Disconnect / S 시스템 / U username / ID 5 OPENFILES / 연결 끊기 / S 시스템 / U 사용자 이름 / P 암호 / ID *
Openfiles.exe는 열려있는 모든 파일을 프로세스 이름과 함께 나열하는 작업을 완벽하게 수행하지만 프로세스를 강제로 종료 할 수는 없습니다. 그러나이 뛰어난 (그러나 간과 된) 내장 콘솔 도구는 파일을 사용하는 프로세스 이름을 빠르게 찾거나 네트워크 사용자가 공유 폴더를 통해 액세스하는 파일의 연결을 끊을 때 유용합니다. 타사 솔루션.
5. 열린 파일보기
Nirsoft의 OpenedFilesView는 시스템에서 열린 모든 파일 목록을 표시합니다. 열린 각 파일에 대해 핸들 값, 읽기 / 쓰기 / 삭제 액세스, 파일 위치, 파일을 연 프로세스 등… 추가 정보가 표시됩니다. 선택적으로 하나 이상의 열린 파일을 닫거나 다음과 같은 프로세스를 닫을 수도 있습니다. 이 파일들을 열었습니다.
선택한 파일의 프로세스를 닫거나 선택한 파일 핸들을 닫을 수 있습니다. 핸들 번호는 16 진수 값으로 표시되는 반면 openfiles.exe 콘솔 도구는 일반 형식으로 표시합니다. 이 도구를 사용하면 상황에 맞는 메뉴 옵션을 추가하여 오른쪽 클릭 메뉴를 통해 현재 파일을 사용중인 프로세스를 빠르게 찾을 수 있습니다. 컨텍스트 메뉴 옵션 / 명령 줄 지원은 OpenedFilesView가 제공하는 가장 유용한 기능 중 하나입니다.