탐색기에서 파일이나 폴더 이름을 바꾸거나, 다른 곳으로 이동하려고 할 때 권한이 없다거나 다른 프로그램이 사용 중이라면서 되지 않을 때가 있습니다.
특히 TortoiseSVN을 이용해서 subversion 저장소에서 체크아웃 해 놓은 소스 폴더에서는 자주 발생하는 일이죠.
TortoiseSVN 사용 시에 폴더를 붙잡고 있는 주범은 TortoiseProc.exe 인 경우가 많긴 하지만, 무조건 이녀석을 나쁜 놈으로 몰아버리면 좀 억울하겠죠? 그리고 소스 폴더가 아닌 경우에도 문제를 해결할 수 있는 방법이 필요하니까요.
구글링을 해보면 여러가지 unlocker 유틸리티들이 많긴 합니다. 하지만 왠지 신뢰가 안가고 찜찜하다는 생각이 듭니다. 좀 믿을만한 녀석이 없나할 때 떠오르는 이름이 바로 Sysinternals 죠.
Sysinternals 에서 제공하는 Process Explorer 라는 툴이 있는데요, 이 녀석은 윈도우에서 기본 제공하는 작업관리자 기능을 보강하면서도, 프로세스별로 어떤 DLL이 로드되었는지 보여주는 등의 기능이 있어서 개발할 때 유용하게 사용하고 있습니다. 개발하다보면 괜히 엉뚱한 곳에 있는 DLL이 로드되어서 삽질하는 경우가 있거든요 T.T
Process Explorer 에는 프로세스가 로드한 DLL 뿐만 아니라 사용하고 있는 핸들 정보들을 보여주는 기능도 있는데, 이걸 이용하면 어느 프로세스가 어떤 파일을 사용하고 있는지 확인할 수가 있습니다.
Process Explorer 를 관리자 권한으로 실행시키고, Find 메뉴에서 "Find Handle or DLL..." 을 선택합니다. 그러면 다이얼로그가 하나 표시되는데, 거기에 폴더 이름이나 파일 이름을 써넣고 Search 버튼을 눌러줍니다. 검색 결과를 보면 여러가지 타입의 결과들이 같이 표시가될 수 있는데, File 타입으로 되어 있는 것이 우리가 찾으려는 대상입니다.
검색 결과 목록에서 원하는 항목을 마우스로 클릭하면 Process Explorer 메인 윈도우에서도 해당 프로세스가 선택이 됩니다. 이제 어떤 프로그램이 파일을 사용중인지 알았으니 정상적으로 프로그램을 종료시켜주면 되겠죠. 미운 녀석이라면 Process Explorer 메인 윈도우에서 마우스 오른쪽 클릭 후 표시되는 메뉴에서 Kill Process 해서 강제로 종료시켜주면 되겠습니다.