MenuIcon

Owl-Networks Archive

LoginIcon

윈도우7 / 프로그램 설치 후 Program Files 폴더에서 프로그램이나 데이터를 찾을 수 없는 경우

| 분류: 컴퓨터 사용 경험 | 최초 작성: 2012-03-31 14:46:54 |

윈도우 XP 에 익숙해진 사용자가 윈도우 7이나 윈도우 비스타로 업그레이드 후 당황하는 것 중의 하나가, 분명 프로그램을 설치했는데 C:\Program Files 아래에서 프로그램을 찾을 수 없다거나, 프로그램에서 사용하는 데이터 파일을 프로그램의 설치 폴더에서 찾을 수 없는 문제일 것이다. 사실 앞의 문제는 대부분의 설치 관리자(인스톨러)가 관리자 권한을 받아 실행되기 때문에 거의 발생하지 않는 문제인데, 뒤의 문제 - 데이터 파일을 찾을 수 없음 - 는 의외로 자주 겪는 문제이다. 이 게시물은 이런 현상이 발생하는 원인과 그 해결 방법을 설명한다.

특히 윈도우 XP 또는 그 이전에 출시된 게임을 플레이하면서 이런 상황을 많이 겪는다. 대개의 게임들은 설치 폴더 또는 설치 폴더의 하위 폴더에 게임의 세이브나 설정 등을 저장하는데, 이런 게임을 플레이한 후에 설정 데이터 또는 세이브 데이터를 백업하려 하면 정작 이 파일들이 보이지 않는 것이다.

■ 발생 상황

이 문제는 윈도우 XP 또는 그 이전에 공개된 프로그램(이후에 공개되었더라도 권한 문제를 고려하지 않은 프로그램)을 윈도우 7이나 윈도우 비스타에서 실행하면서 관리자 권한을 부여하지 않고 실행한 경우에 발생한다.

■ 발생 원인

윈도우 비스타 또는 윈도우 7은 관리자 권한 없이는 C:\Program Files 나 C:\Windows 등의 폴더에 파일을 쓰거나 수정할 수 없도록 하여 윈도우 시스템의 보안성을 향상시켰다. 따라서 프로그램이 설치된 폴더 - Program Files 폴더 이하 - 에 데이터를 기록하려면 반드시 관리자 권한을 명시적으로 부여하여 실행해야 한다. 그러나, 이전에 개발된 많은 프로그램들은 데이터 파일을 Program Files 이하의 프로그램 설치 폴더에 저장하면서도, 실행 시 명시적으로 관리자 권한을 요구하지 않는 경우가 많이 있다.

윈도우 시스템은 이런 경우에 발생할 수 있는 프로그램 오류 - 파일을 기록할 수 없음으로 인해 발생하는 기록 실패 오류 - 를 방지하고 하위 호환성을 유지하기 위해 관리자 권한이 없이도 기록할 수 있는 별도의 가상 Program Files 폴더를 준비하고 있다. 만약 관리자 권한을 부여받지 않은 프로그램이 자신의 설치 폴더에 데이터를 저장하려고 시도하면, 윈도우 시스템은 이 데이터를 개인 폴더 아래의 가상 Program Files 폴더에 저장하고, 프로그램이 자신이 저장했던 데이터를 읽으려 하면 원래의 Program Files 폴더 대신 가상 Program Files 폴더의 파일을 연결해 줌으로써 오류를 막는다.

따라서, 사용자는 데이터 파일을 Program Files 폴더 아래에 기록하였다고 생각하겠지만, 실제로 그 데이터 파일들은 윈도우 시스템이 준비해 둔 가상의 Program Files 폴더 이하에 저장되어 있다. 따라서 사용자가 Program Files 폴더 이하에서 저장했던 파일을 찾는 경우 그 파일을 찾을 수 없는 현상이 발생한다.

■ 해결 방법

따라서, 저장된 데이터 파일을 찾기 위해서는 개인 폴더 아래에 있는 가상 Program Files 폴더를 찾아가면 되며, 이 폴더는 다음의 위치에 있다.

C:\Users\사용자 이름\AppData\Local\VirtualStore\Program Files

위 폴더를 찾아간 후 해당 프로그램의 폴더로 들어가면 파일들을 찾을 수 있다. 좀더 편하게 찾아가려면, [시작] 버튼을 클릭한 후 실행창에 다음과 같이 입력하여 가상 Program Files 폴더로 바로 접근할 수 있다.

explorer.exe "%LOCALAPPDATA%\VirtualStore\Program Files"

■ 잠재적 문제점: 프로그램 권한과 탐색 우선 순위

이러한 동작 방식은 권한에 따라 접근 위치가 달라지게 되는 결과 잠재적으로 데이터 유실의 위험성을 내포하고 있다. 이하에서는 프로그램에 관리자 권한이 주어졌는지 여부에 따라 실제로 어떤 데이터가 참조되는지를 확인하고, 이것이 어떤 결과를 야기할 개연성이 있는지를 알아볼 것이다.

실제 Program Files 폴더와 가상 Program Files 폴더 중 어느 쪽 폴더가 참조되는지는, 해당 폴더에 액세스하는 프로그램이 어떤 권한 하에 실행되고 있는가에 따라서 그 탐색 우선 순위가 달라진다. 일단 다음과 같이 정리할 수 있다.

  • 관리자 권한 없이 실행된 경우: 읽기의 경우 가상 Program Files 폴더가 우선 참조되며, 가상 Program Files 폴더가 존재하지 않는 경우나 가상 Program Files 폴더에 찾는 파일이 없는 경우 실제 Program Files 폴더가 참조된다. 쓰기의 경우 항상 가상 Program Files 폴더가 사용된다.
  • 관리자 권한을 받아 실행된 경우: 읽기이건 쓰기이건 관계 없이 실제 Program Files 폴더 탐색되며, 가상 Program Files 폴더는 어떤 경우에도 참조되지 않는다.

예를 들어, Program Files 폴더 이하에 데이터를 저장하는 프로그램을 사용하면서 관리자 권한 없이 실행해 왔다면, 그 프로그램이 저장한 모든 데이터는 가상 Program Files 폴더 이하에 저장되어 있을 것이다. 그런데 만약 이 상태에서 (갑자기 무슨 바람이 불었는지) 사용자가 이 프로그램을 관리자 권한을 주어 실행했다면, 가상 Program Files 폴더가 전혀 참조되지 않는 결과, 기존에 저장했던 데이터를 하나도 읽을 수 없는 상황이 발생한다.

반대의 경우는 조금 더 비극적일 수 있다. 이 프로그램을 항상 관리자 권한을 주어 실행해 왔다고 하자. 그렇다면 이 프로그램은 지금까지의 모든 데이터를 실제 Program Files 폴더 이하에 저장해 왔을 것이다. 그 와중에, 사용자가 실수이건 아니건 이 프로그램을 관리자 권한 없이 실행했다고 가정하자. 이 시점에서 프로그램은 아무런 이상 없이 실행되고, 기존에 작업하던 데이터를 모두 정상적으로 보여준다. (가상 Program Files 폴더 이하에 데이터 파일이 없기 때문에, 프로그램은 일단 실제 Program Files 폴더 이하에 있는 데이터 파일을 읽어 오기 때문이다.) 이제 사용자는 늘 하던 것처럼 데이터를 편집하여 저장한다. 그리고 프로그램은 아무 일도 없다는 듯 데이터 저장 성공 메시지를 출력했다. 그러나 지금 이 순간, 이 프로그램은 관리자 권한이 없었기 때문에, 실제 Program Files 폴더의 원래 데이터를 덮어쓰는 대신 가상 Program Files 폴더 이하에 자신의 폴더를 생성하고 거기에 새로운 데이터를 기록한 것이다. 결국 작업한 데이터는 실제 Program Files 폴더의 데이터 파일에 반영되지 않은 것이다. 이러한 상황을 알 리 없는 사용자, 다음 날 다시 그 프로그램을 관리자 권한을 주어 실행했다. 그리고 어제 작업한 내용이 하나도 반영되어 있지 않은 데이터를 보면서 아연실색하게 될 것이다!

지금까지의 상황은 그나마 프로그램 사용자가 한 사람이었기 때문에 뭔가 문제가 발생했다는 것을 바로 알 수 있고, 즉시 적절한 조치를 취할 수 있을 것이다. 그러나 만약 이 프로그램이 여러 사람이 함께 사용하는 협동 작업 프로그램이었다면, 상황은 훨씬 더 치명적인 상황으로 치달을 수도 있다. 예를 들어, 한 사람은 항상 이 프로그램을 관리자 권한을 주어 실행해 왔고, 다른 한 사람은 관리자 권한 없이 실행해 왔다고 한다면, 그리고 이들이 동일한 데이터를 사용해서 공동 작업을 하고 있(다고 생각했)었다면... 어쩌면 이들이 뭔가 문제가 생겼다는 것을 눈치챌 때쯤에는 돌이킬 수 없는 사태가 발생했을 가능성이 매우 높아진다.

■ 덧붙임

윈도우 비스타 이후의 윈도우에서 가상 Program Files 폴더라는 기묘한 방식을 채택한 배경과 필요성 자체는 충분히 이해할 수 있다. 강화된 보안성으로 인해 기존 프로그램들이 줄줄이 오류를 내뿜는 것을 방지하기 위한 어쩔 수 없는 선택이고, 의외로 이런 동작 방식은 어떤 의미에서는 프로그램 바이너리와 데이터를 윈도우 시스템이 자동으로 분리해 준다는 점에서 일부의 사용자들은 이를 유용하게 이용할 수도 있을지 모른다.

문제는 사용자가 이같은 사실을 모르는 상태에서 프로그램을 사용하는 경우가 적지 않고, 그 결과 사용자가 자신의 데이터를 찾을 수 없어 당황하게 되는 상황을 야기한다. 만약 사용자가 권한에 대한 개념을 이해하지 못하는 상황에서 권한을 혼용하여 사용하는 경우에는 더욱 더 안 좋은 상황이 발생할 수 있다. 기존 데이터를 유실할 수도 있고, 엉뚱한 데이터를 백업하는 실수를 할 수도 있다.

따라서 일반 사용자의 경우에도, 이러한 동작 방식을 반드시 알고 있어야만 실수를 막을 수 있다. 프로그램 개발자의 경우에도, 특히 윈도우 비스타 이후의 운영체제에서 동작하는 프로그램의 경우 (비록 오류가 발생하지는 않는다 하더라도) 데이터를 Program Files 이하에 바로 저장하지 않도록 작성하는 것이 좋겠다. 그 위치는 내 문서 폴더 이하가 될 수도 있고, Local Settings 폴더(윈도우 비스타 이후라면 AppData 폴더) 이하가 될 수도 있겠다. 아니면 아예 프로그램 바이너리를 실행할 때에 명시적으로 관리자 권한을 받도록 실행 바이너리를 설정할 수도 있겠지만, 이는 썩 바람직하다고 볼 수는 없다. 프로그램 자체가 반드시 관리자 권한을 필요로 하는 프로그램이 아니라면 단지 데이터 저장만을 위해서 과도하게 관리자 권한을 남용하도록 프로그램을 설계하는 것은 피하는 것이 바람직할 것이다.

☞ 태그: 윈도우7, Program Files, VirtualStore, 관리자 권한,

☞ 트랙백 접수 모듈이 설치되지 않았습니다.

☞ 덧글이 1 개 있고, 트랙백이 없습니다.

덧글을 남기시려면 여기를 클릭하십시오.

□ asyncro 님께서 2013-07-08 13:56:21 에 작성해주셨습니다.

마침 이 문제로 머리아팠는데 덕분에 좋은정보 얻어갑니다 감사드립니다

[483] < [434] [432] [429] [426] [424] ... [423] ... [422] [421] [420] [419] [418] > [19]

(C) 2000-2018, Owl-Networks. Powered by Perl. 이 페이지는 HTML 5 표준에 따라 작성되었습니다.