SYSTEM에 의해서 파일이 잠기는 현상
제목에서 말하는 "SYSTEM"은 실행상태에서 파일을 잠그는 어떤 일반적인 프로세스를 가리키는 것이 아니고, 작업 관리자에서 보면 "System"이라고 지칭되는 프로세스를 말합니다. 즉, 물리적인 EXE 파일도 가지고 있지 않은 그 "System" 프로세스입니다.
현상은, 빌드 서버에서 이뤄지는 컴파일이 계속 다음과 같이 실패하는 것으로 시작되었습니다.
CopyFilesToOutputDirectory:
Copying file from "obj\Release\Test.exe" to "D:\...\bin\Test.exe".
C:\Windows\Microsoft.NET\Framework\v4.0.30319\Microsoft.Common.targets(2868,9):
error MSB3021: Unable to copy file "obj\Release\Test.exe" to "D:\...\bin\Test.exe". The process cannot access the file 'D:\...\bin\Test.exe' because it is being used by another process.
[D:\...\Test.csproj]
Done Building Project "D:\...\Test.csproj" (default targets) -- FAILED.
위의 경우에는 "Test.exe"라는 파일명이었지만, 재미있게도 이 현상들은 모든 EXE 확장자를 가진 파일에 공통적으로 발생했습니다. 도대체 어떤 프로세스가 잠그고 있는지 확인하기 위해 "
LockHunter"로 보니, 다음과 같이 "SYSTEM"이었습니다. ^^;
세상에... "System"이라니... 절망적이라고 볼 수 있는 상황이었습니다. ^^;
그렇다고 해서 아주 잠겨진 것도 아닙니다. 그냥 탐색기에서 메뉴를 이용하여 삭제를 하면 그냥 지워집니다.
그런데, 명령행에서 이 작업을 하면 매우 재미있는 결과가 나옵니다. (다음은 3번 연속으로 삭제 시도를 한 것입니다.)
D:\...\bin>del c:\temp\Test.exe <--- 첫 번째 시도
D:\...\bin>del c:\temp\Test.exe <--- 두 번째 시도
c:\temp\Test.exe
Access is denied.
D:\...\bin>del c:\temp\Test.exe <--- 세 번째 시도
Could Not Find c:\temp\Test.exe
^^; 바이러스일까???? 싶어서 백신으로 검사해 보았으나 아무런 이상이 없었습니다. (물론, 해당 백신 프로그램이 100% 완벽하게 보장할 수는 없지만.)
또 하나 재미있는 현상은, 탐색기에서 보안 탭을 눌러보면 다음과 같이 설정을 (일반 사용자 권한으로는) 못한다고 나옵니다.
그래서, 부모 폴더로부터 보안을 상속받도록 하기 위해 직접 부모 폴더의 보안을 변경해서 적용하는데 다음과 같이 할 수 없다고 나옵니다.
더욱 재미있는 것은, 저런 식으로 속성창을 띄우거나 하면 해당 EXE 파일이 가끔씩 삭제된다는 것입니다.
오류 현상이 워낙 설명하기 힘들다 보니, 해결책을 위한 검색도 힘들었습니다. "SYSTEM"이라는 단어와 "lock"이라는 단어를 조합하니 그다지 영양가있는 결과가 나오지 않았는데요. 다행히 다음과 같은 글을 발견할 수 있었습니다.
What part of Windows 7 randomly locks executable files?
; http://forums.somethingawful.com/showthread.php?threadid=3313767
해결책은?
"Application Experience" 서비스를 활성화시켜주면 됩니다. 그러고 보니 생각이 나버렸습니다. ^^; 최근 빌드 서버의 메모리 부족으로 어떻게든 가용 메모리를 확보하고자 몇몇 필요없을 것 같은 NT 서비스를 "Disabled" 상태로 바꿔 버렸는데 바로 그것이 문제가 된 것입니다.
아무리 그렇다고는 해도... 정말이지 부작용 자체는 지나치게 유별난 것 같습니다. ^^;