Windows ConfidentialRunOnce 대기

Raymond Chen

프로세스 진행 도중 시스템을 다시 시작해야 하는 설치 작업을 한다고 생각해 보십시오. 예를 들어 해당 프로그램을 설치하려면 현재 사용하고 있는 시스템 DLL을 업그레이드해야 합니다. 새 DLL 파일을 설치하려면 시스템을 다시 시작해야 합니다. 시스템이 다시 시작되어 DLL이 업그레이드되면 설치 과정의 다음 단계에서 해당 DLL 파일을 사용할 수 있습니다.

RunOnce 키는 이처럼 시스템이 다시 시작된 후에 설치 프로그램이 설치를 마치기 위해 사용하도록 고안된 기능입니다. 이는 프로그램이 문제를 일으키지 않는다고 믿을 때 얘기입니다.

Windows® Explorer에서는 데스크톱 및 작업 표시줄을 생성하기 전에 RunOnce 프로그램이 실행되어 완료될 때까지 대기합니다. 이는 RunOnce가 설치 프로그램용이라는 원리에 의해 작동하기 때문입니다. RunOnce 프로그램을 사용하면 시스템 구성 데이터가 변경될 수 있으므로 사용자는 재구성되고 있는 시스템을 사용하지 않아야 합니다.

예를 들어 RunOnce 프로그램에서 방금 설치된 파일의 기준을 새로 설정하고 바인딩하며 이 중 일부는 셸 확장에 포함된 파일이라고 생각해 보겠습니다. 이 경우 사용자는 업데이트 도중에 해당 프로그램을 실행하거나 확장 프로그램을 활성화하지 않아야 합니다.

"설치 프로그램용" 원리에 숨은 또 다른 함정은 RunOnce 키는 사용자가 관리자 권한으로 로그온하는 경우에만 실행된다는 점입니다. 그러므로 관리자가 아닌 사용자의 경우에는 설치를 완료할 수 없습니다. 또한 관리자가 아닌 사용자가 RunOnce 키를 실행하는 경우 더 이상 "한 번만 실행" 기능을 사용할 수 없습니다. 바로 이 점이 문제를 야기하는 것입니다. "한 번 실행했으니까 그만 실행하면 안 될까?"라고 생각할 수도 있지만 이러한 시스템의 전역 상태를 변경하려면 관리자 권한이 있어야 합니다. 그러나 관리자가 아닌 사용자는 당연히 사용자 권한을 가질 수가 없겠지요. 프로그램은 "한 번만 실행"되지 않으며 대신 "관리자가 로그온할 때까지 계속해서 실행"됩니다.

  (더 크게 보려면 이미지를 클릭하십시오.)

프로그램 설치 마무리 과정에 사용되는 RunOnce는 Windows 설치 시 자동으로 확인됩니다. 서비스 팩을 설치하거나 새로운 버전의 Windows로 업그레이드할 경우 설치 마법사에서 RunOnce 키를 확인합니다. RunOnce 키를 확인하면 "Hey, you still have some unfinished program installation in progress. Please finish that before you try to upgrade the operating system."(일부 프로그램 설치 과정이 완료되지 않았습니다. 운영 체제를 업그레이드하기 전에 설치를 완료하십시오.)와 같은 오류 메시지가 표시됩니다. 이는 프로그램 설치 도중에 운영 체제가 변경되지 않도록 하기 위한 올바른 기능입니다.

RunOnce에 대해 자세히 살펴보면 이전의 상황을 알 수 있습니다. RunOnce는 관리자 및 관리자가 아닌 사용자의 구분이 없었던 Windows 95 운영 체제에 처음 포함되었던 기능입니다. Windows 95에서는 모든 사용자가 관리자였으므로 RunOnce를 사용하는 설치 프로그램은 다음에 시스템을 다시 시작할 때 RunOnce 작업이 수행될 것임을 확신할 수 있었습니다.

Windows Vista™와 같은 최신 Windows 운영 시스템에서는 관리자 권한이 없는 사용자의 경우 몇 개월에 한 번씩 로그온할 수 있습니다. 결과적으로 RunOnce를 실행해야 하는 프로그램은 대기 시간이 매우 길어질 수 있습니다.

조금 다른 이야기를 해보자면, 계속 실행되는 RunOnce를 본 적이 있습니다. 이 RunOnce는 실행될 때마다 RunOnce 키에 자신을 다시 추가합니다. 이 경우 더 이상 프로그램 설치의 일부가 아닌 프로그램의 정상적인 작업의 일부로 실행되므로 분명 RunOnce 키의 용도와 다르게 실행되는 것입니다. 또한 이러한 동작으로 인해 Windows 설치 프로그램은 실행될 때마다 메시지를 표시합니다.

이 성가신 프로그램은 "I just need to do a few more little things and I'll really be done."(몇몇 사소한 작업을 실행해야 하며 이 작업은 금방 완료됩니다.) 또는 "The program will not finish installing today, but surely tomorrow."(프로그램 설치는 오늘 안으로 끝나지 않지만 내일은 반드시 완료됩니다.)와 같은 메시지를 계속해서 표시하므로 사용자는 결국 운영 체제를 업그레이드할 수 없게 됩니다. 이건 마치 오지도 않을 '고도'를 기다리는 사무엘 베케트의 희곡과 조금도 다르지 않은 상황이라고 할 수 있겠군요.

Raymond Chen은 자신이 운영하는 웹 사이트인 The Old New Thing(영문)에 Windows의 역사와 Win32 프로그래밍에 대한 글을 게시하고 있습니다. 또한 그는 현재 자신의 웹 사이트와 같은 제목의 저서인 The Old New Thing(Addison-Wesley, 2006)의 출간을 준비하고 있습니다.

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