IIS 오류-다른 프로세스가 파일을 사용 중이기 때문에 프로세스가 액세스할 수 없습니다.
개발 테스트 용으로 Windows 10 에 IIS 서버를 셋팅하여 사용중입이니다. 새로운 테스트 사이트를 9000번 포트에 설정해서 사용중에 다음과 같은 오류가 발생하였습니다.
출처: https://offbyone.tistory.com/340"다른 프로세스가 파일을 사용 중이기 때문에 프로세스가 액세스할 수 없습니다.(예외가 발생한 HRESULT: 0x80070020)"
인터넷에서 에러 메세지를 검색해 본 결과 Microsoft의 support 사이트에서 관련 정보를 찾았습니다.
비슷한 증상이고, 이 경우는 80이나 443 포트가 사용중일때 발생한다고 합니다. 해결책은 ListenOnlyList 레지스트리 하위키의 값이 잘못 되었기 때문에 수정하면 된다고 되어 있었습니다.
나의 경우도 셋팅되어 있는 여러개의 사이트중에 80과 443을 사용하는 곳이 있어서 regedit를 사용해서 레지스트리를 검색해 본 결과 ListenOnlyList 하위키가 존재하지 않았습니다. 아마도 나의 경우는 다른 상황인것 같습니다.
그래서 이벤트 뷰어를 확인해 보았습니다. 이벤트 ID 15005번으로 오류가 발생하였고, "[::]:9000에 대한 기본전송에 바인딩할 수 없습니다."라는 메세지가 보입니다.
9000번 포트를 이미 사용하고 있는 프로세스가 있는지 확인해 보았습니다. 사용중인 포트를 알아보기 위한 방법은 "윈도우즈에서 포트를 점유하고 리스닝 중인 프로세스 알아내기" 글을 참고하세요.
C:\>for /f "tokens=5" %x in ('netstat -aon ^| findstr 9000') do tasklist /FI "PID eq %x"
eclipse가 9000번 포트를 사용중이네요. 다시 구글링을 통해서 eclipse가 왜 9000번 포트를 사용하는지 확인해 보았습니다. 원인은 이클립스의 PHP 개발도구 플러그인인 PDT 가 디버깅용으로 9000번 포트를 사용하고 있다는 것을 알 수 있었습니다. 디버깅 중에만 사용하는 것이 아니고, 항상 포트를 점유하고 있다는 것은 좀 문제가 있는것 같습니다.
이제 해결 방법으로 IIS 사이트의 포트를 변경하거나, 이클립스 PDT의 사용포트를 변경하는 방법이 있겠습니다.
이클립스에서 PDT의 xdebug가 사용하는 포트를 변경하는 방법을 알아 보겠습니다.
"Window->Preferences->PHP->Debug->Debuggers"에서 xdebug의 설정에서 포트를 다른 것으로 변경합니다. 여기서는 9001로 바꿨습니다.
이클립스를 재시작후에 사용중인 포트를 검색해본 결과 9000과 9001이 모두 사용중이 되었습니다. 더 바꿔야 할 것이 있습니다.
"Window->Preferences->PHP->Servers" 에서 Default PHP Web Server 를 선택하여 수정합니다. 수정창에서 Debugger 탭을 선택하고, Debugger를 "XDebug"로 선택합니다. 그리고 포트를 9001로 변경후 이클립스를 재시작합니다.
이클립스 PDT의 디버거 포트를 변경한후 IIS 사이트가 정상적으로 실행되었습니다.
위 포스팅이 문제될 경우 삭제하겠습니다.