|
Vista 에서 수행되는 어플리케이션은 기본적으로 표준사용자 권한으로 수행됩니다. 설사 사용자가 Administrators 그룹에 포함된 계정을 이용하여 로그인을 수행하였더라도, 프로그램은 표준 사용자 권한을 가지고 수행되게 됩니다.((이와 관련된 자세한 사항은 다음에 이야기 하겠습니다) 이러한 특성 때문에 예전에는 제한없이 사용가능 했던 리소스들에 대해서 접근이 불가능하거나 그 동작 방식이 변경된 경우가 있습니다. 구체적으로 예를 들어보면, C:\windows 나 c:\windows\system32 폴더의 권한 설정을 보면 표준사용저는 write 권한이 없습니다. 이것은 Program Files 폴더에 대해서도 마찬가지 입니다. 레지스트리는 어떨까요? HKEY_LOCAL_MACHINE 에도 내용을 읽을 수는 있지만 수정, 삭제, 추가 등의 동작은 제한됩니다. 앞서 Vista Note -1 에서 환경설정 파일을 어디에 저장할 것인가에 대한 내용을 다루었던 것을 기억하시나요? 만일 여러분이 Program Files 밑에 프로그램을 배포하고, 그 위치에 환경설정 파일을 저장하도록 작성해 두면 어떨까요? 이 경우에는 수정이나 저장 권한이 없으므로 실패해야 합니다. 하지만 Vista가 단순히 그렇게만 출시되었다면 어떤일이 일어날까요? 아마도 엄청나게 많은 프로그램들이 제대로 수행되지 않을 것입니다. 우리는 흔히 Program Files 밑에 프로그램을 설치하고 프로그램과 동일한 폴더에 환경설정 파일을 저장하죠. 또한 HKEY_LOCAL_MACHINE 아래에 프로그램 수행에 필요한 정보를 저장하기 합니다. 그래서 Vista에서는 이전 version의 윈도우에서 정상적으로 동작하던 어플리케이션이, Vista에서도 잘 동작할 수 있도록 몇가지 장치들을 강구해 두었습니다. 그 중에 하나가 Virtualization 입니다. Virtualization이란, 여러분이 Program Files 이하에 파일을 저장하려고 시도하면, 실제 물리적으로 Program Files 이하에 파일을 저장하지 않고, c:\users\<사용자이름>\AppData\Local\VirtualStore\Program Files 로 redirection 시켜 버립니다. 이는 Windows 폴더에 대해서도 마찬가지 입니다. 프로그램에서 Windows 폴더에 무엇인가를 저장하려고 시도하면, c:\users\<사용자이름>\AppData\Local\VirtualStore\Window에 파일을 저장하게 됩니다. 아래와 같이 TextBox control 1개와 Button Control 2개를 form에 배치하고 각각의 이벤트 핸들러를 다음과 같이 정의해 봅시다.
private { SaveFileDialog saveDlg = new saveDlg.Filter = "txt files (*.txt)|*.txt|All files (*.*)|*.*"; saveDlg.FilterIndex = 2; if (saveDlg.ShowDialog() == DialogResult.OK) { using (StreamWriter sw = new { sw.Write(textBox1.Text); } } }
private { OpenFileDialog openDlg = new openDlg.Filter = "txt files (*.txt)|*.txt|All files (*.*)|*.*"; openDlg.FilterIndex = 2; if (openDlg.ShowDialog() == DialogResult.OK) { using (StreamReader sr = new { string readLine; textBox1.Clear(); while ((readLine = sr.ReadLine()) != null) { textBox1.Text += readLine; } } } } TextBox control에 "test"를 입력하고, Save 버튼을 클릭한 후, "C:\Program Files" 이하에 test.txt 라는 이름으로 파일을 저장해 봅시다. 그런 다음 command prompt를 열고 c:\program files 이하를 살펴보면,
이제 virtualization folder로 이동해서 program files 이하를 살펴봅시다.
위 결과를 보면, test.txt가 c:\Program Files가 아닌 VirtualStore 이하의 Program Files 이하에 저장된 것을 확인할 수 있습니다. 이제는 TextBox의 내용을 지우고, Load 버튼을 클릭한 후, c:\Program Files 로 이동해 봅시다. 그러면 VirtualStore 이하에 있던 text.txt 파일이 존재함을 알 수 있습니다. 물론 파일을 선택하여 열어보면, 저장한 내용이 포함되어 있습니다. 몇가지 더 test를 수행해 볼 수 있습니다. 만일 물리적으로 C:\Program Files 이하에 동일 이름의 파일이 존재한다면, File Dialog에 나타난 파일은 어느 파일일까요? VirtualStore 이하에 있는 test.txt 파일일까요 ? C:\Program Files 이하에 있는 파일 일까요? 이러한 동작을 확인해 보기 위해서 CMD shell을 관리자 권한으로 수행한 후, c:\Program Files로 이동해서 다음과 같이 입력해 봅시다.
이제 프로그램에서 Load를 선택하여 C:\Program Files를 이동한 후, tet.txt를 선택하여 그 내용을 확인해 봅시다. "test" 인가요 "test2" 인가요? 답은 VirtualStore에 있는 파일이 열립니다. 한가지 더 test해보고 싶으시죠? VirtualStore 이하에 파일이 존재하지 않는다면 어떻게 될까요?
이렇게 되면 c:\Program Files 이하에 존재하는 test.txt 파일이 열립니다. 즉 test2 라는 내용이 표시되겠죠. 정리하면 다음과 같습니다.
즉, 항상 VirtualStore가 우선적으로 검토되고, 만일 적절한 파일을 발견하지 못한 경우에 한해서만, 물리적인 저장 위치인 C:\Program Files 를 access한다고 정리하시면 됩니다. Registry의 경우는 어떨까요? 핵심적인 메커니즘은 파일과 유사합니다. Registry Virtualization은 HKEY_LOCAL_MACHINE\Software 이하만을 가상화 합니다. 즉 HKEY_LOCAL_MACHINE\Software\AppKey1 에 접근을 시도하면 실제로는 HKEY_USERS\<User SID>_Classes\VirtualStore\Machine\Software\AppKey1 에 접근하게 됩니다. Registry Virtualization에 대한 보다 자세한 내용은 Registry Virtualization 를 참고하십시오.
마지막으로 이러한 virtualization 기능은 다음 version의 windows 출시나 혹은 그 이전에라도 제거될 수 있다는 것입니다. 실제로 64bit Vista에서는 이러한 virtualization 기능이 전혀 동작하지 않습니다. 따라서 virtualization 기능에 대해서 전혀 기억하지 못하더라도 다음 한가지만은 기억해야 합니다. Program Files나 windows 혹은 windows/system 폴더 그리고 HKEY_LOCAL_MACHINE\Software 등에는 파일 혹은 정보를 수정,삭제,저장할 수 없으므로 프로그램을 수정해서 다른 위치에 이러한 정보를 저장하도록 고쳐야 한다는 것입니다. 이 것이 제가 Vista Note -1 에서 환경설정 파일에 대한 내용을 미리 말씀 드린 이유이기도 합니다. 이 글과 관련있는 글을 자동검색한 결과입니다 [?]
|
![]() by 김명신 카테고리
이글루 파인더
라이프로그
이글루링크
erehwon.LAB
미친병아리가 삐약삐약 소스코드위를 걷다..... 영원히 살 것처럼 꿈을 꾸.. zoops 이야기 전기쓰레빠의 매트릭스 Junghwan and Miny.. ~★~ 우하하!!~ 프로.. [ catch me if you ca.. 블로그 옮김 -> fribirdz.. 디지털을 말한다 by oojoo 더머&채니이야기 견우의 블로그 .. 이상훈의 사는 이야기 내일은 내일의 바람이 분다. 텅빈하늘 똥강아지가 멍멍~ Atelier 기억속으로 날다(Walki.. 애자일 이야기 미친감자의 LOG - Last Paromix - SQL Server Troubles.. Keep going with me 최근 등록된 덧글
유근호 : 당연히 괜찮습..
by 김명신 at 11/06 일일이 다 세어 보셨다니.. by 유근호 at 11/04 쩌비: 그쳐? 저도 그렇게.. by 김명신 at 11/03 디자인 언제나 고민이죠... by 쩌비 at 11/02 Freecoder : 당근됩니다. by 김명신 at 08/31 최근 등록된 트랙백
티맥스 윈도우 스크린샷..
by The Story of A Strang.. free7942g의 생각 by free7942g's me2DAY 프로그래머 by ego+ing 사진찍는프로그래머의 생각 by eslife's me2DAY 제프리 리처의 Windows .. by 김재호의 디지털보단 아.. 이전블로그
2009년 11월
2009년 10월 2009년 09월 2009년 07월 2009년 06월 2009년 05월 2009년 04월 2009년 03월 2009년 01월 2008년 12월 2008년 11월 2008년 10월 2008년 09월 2008년 05월 2008년 04월 2008년 03월 2007년 12월 2007년 11월 2007년 10월 2007년 09월 2007년 08월 2007년 07월 2007년 06월 2007년 05월 2007년 04월 2007년 03월 2007년 01월 2006년 12월 2006년 11월 2006년 10월 2006년 09월 2006년 08월 2006년 07월 2006년 06월 2006년 05월 2006년 04월 2006년 03월 2006년 02월 2006년 01월 2005년 12월 2005년 10월 2005년 09월 2005년 07월 2005년 06월 2005년 05월 2005년 04월 2005년 03월 2005년 02월 2005년 01월 2004년 12월 2004년 11월 2004년 10월 2004년 09월 2004년 08월 2004년 07월 2004년 06월 2004년 05월 2004년 04월 2004년 02월 2004년 01월 2003년 11월 2003년 08월 |