Windows Confidential균등한 공유

Raymond Chen

프로그램을 제거할 때 Windows®에서 "다른 응용 프로그램이 올바르게 실행되지 않도록 중지할 수 있는" 파일의 삭제 여부를 묻는 메시지를 표시하는 이유가 무엇인지 생각해 본 적이 있나요? 사실 이러한 메시지(스크린샷 참조)는 Windows에서 표시하는 것이 아니라 제거 프로그램에서 표시하는 것입니다. 따라서 정확하게 말하자면 "응용 프로그램 제거 프로그램에서 이러한 대화 상자를 표시하는 이유가 무엇인가요?"라고 해야 옳을 텐데요. 이것이야말로 사용자에게 대답할 수 없는 질문을 하는 가장 좋은 예라 할 수 있습니다. 왜 이러한 질문에 제대로 대답할 수 없는지에 대해 알아보도록 하겠습니다.

설치 관리자는 여러 관련 없는 프로그램에서 사용하는 MFC 런타임 라이브러리와 같이 여러 응용 프로그램에서 사용하는 파일에 대한 참조 횟수를 관리하기 위해 SharedDLLs 레지스트리 키에 항목을 만듭니다. 이 항목에는 파일 및 해당 파일의 참조 횟수가 기록됩니다. 파일에 대한 항목이 이미 있는 경우 참조 횟수가 증가하며, 파일에 대한 항목이 아직 없는 경우 참조 횟수가 1로 설정됩니다. 반대로 프로그램이 제거되면 참조 횟수가 감소하고 0이 되면 해당 파일을 사용하는 프로그램이 더 이상 존재하지 않는 것이므로 파일이 삭제됩니다. 일단 이론은 이와 같습니다.

삭제 여부를 묻는 메시지

삭제 여부를 묻는 메시지  (더 크게 보려면 이미지를 클릭하십시오.)

그런데 이러한 모델에는 심각한 문제가 있습니다. 바로 모든 사용자가 규칙을 준수한다고 가정한다는 것인데요. 사실 이러한 규칙은 어긴다고 해도 위반한 사용자에게 벌칙이 주어지는 것도 아니므로 지켜지지 않을 가능성이 매우 높습니다.

예를 들어 MFC 런타임 라이브러리를 사용하는 프로그램의 경우 해당 설치 관리자가 참조 횟수를 업데이트하지 않고 시스템 디렉터리로 이러한 라이브러리를 복사한다고 가정해 봅시다. 이런 경우 이 프로그램을 제거할 때 라이브러리만 삭제됩니다. 그렇다면 이제 이 프로그램과 규칙을 준수하는 프로그램을 같은 시스템에 설치하는 경우 어떠한 상황이 벌어지는지 살펴봅시다. 기본적인 예를 들면 다음과 같습니다.

  1. 좋은 프로그램 설치: 라이브러리가 설치되고 참조 횟수가 1로 설정됩니다.
  2. 나쁜 프로그램 설치: 라이브러리가 설치되나 참조 횟수가 변경되지 않습니다.
  3. 나쁜 프로그램 제거: 라이브러리가 삭제됩니다.

결과적으로 라이브러리가 삭제되므로 좋은 프로그램이 작동하지 않게 됩니다.

또 다른 예를 들어 보겠습니다.

  1. 좋은 프로그램 설치: 라이브러리가 설치되고 참조 횟수가 1로 설정됩니다.
  2. 나쁜 프로그램 설치: 라이브러리가 설치되나 참조 횟수가 변경되지 않습니다.
  3. 좋은 프로그램 제거: 참조 횟수가 0이 되고 라이브러리가 삭제됩니다.

위 예에서는 나쁜 프로그램의 작동이 중지됩니다.

좋은 프로그램 작성자는 나쁜 프로그램으로 인해 좋은 프로그램의 사용이 중지되는 것을 막을 수는 없지만 최소한 자신으로 인해 나쁜 프로그램이 중지되는 것을 막을 수는 있겠다는 사실을 깨달았습니다. 따라서 프로그램에서 파일을 삭제하기 전 "저기요, 제가 지금 파일을 삭제하려 하거든요? 이 파일을 사용 중인 나쁜 프로그램이 있으면 나쁜 프로그램의 사용이 중지될 거에요. 나쁜 프로그램을 사용 중이라면 삭제 안 함을 클릭하세요."라는 내용의 경고 메시지를 표시합니다. 정확한 표현은 아니지만 설명하는 대화 상자가 어떤 것인지는 알 수 있을 겁니다. 이 방법은 유명한 Jeffrey Richter가 1996년 Microsoft Systems Journal 문서에서 권장한 방법이기도 합니다.

그러나 유감스럽게도 이러한 메시지를 표시함으로써 사용자는 올바르게 대답할 수 없는 질문을 받게 되는 것입니다.

물론 일일이 참견해야 직성이 풀리는 지배광들은 Windows에서 이전의 모든 항목 각각을 무시할 수 있는 옵션을 제공하도록 요구하므로 모두 이러한 대화 상자에 찬사를 보낼 것입니다. 실제로 제거 프로그램에서는 제거 프로세스를 파일 단위로 제어할 수 있습니다. 따라서 무엇을 바랄 때에는 신중하십시오. 혹시 그대로 될지도 모르니까요.

Raymond Chen은 자신의 웹 사이트 The Old New Thing에서 Windows의 역사와 Win32 프로그래밍에 대해 다루고 있으며 동명의 저서에서도 이에 대해 다루었습니다. Chen은 자신의 생애에 핵융합이 실용화되지 않을까 생각하기도 합니다.

© 2008 Microsoft Corporation 및 CMP Media, LLC. All rights reserved. 이 문서의 전부 또는 일부를 무단으로 복제하는 행위는 금지됩니다..