|
Administrators 권한이 있는 경우에만 정상적으로 수행될 수 있는 어플리케이션을 만들기 위해서는 manifest를 이용하여 '이 프로그램을 수행하기 위해서는 반드시 권한상승이 필요하다'는 정보를 실행파일에 포함시킬 필요가 있습니다. 물론, 오른마우스를 클릭해서 "관리자 권한으로 실행" 으로 어플리케이션을 수행하거나, '속성'에서 '관리자 권한으로 이 프로그램 실행'을 선택할 수도 있겠지만, 사용자에게 이렇게 어플리케이션을 수행할 것을 강요하는 것은 매우 어려운 일이기 때문에, 실행파일 자체에 '이 어플리케이션은 반드시 Administrators permission이 필요하다' 라는 정보를 추가하여, 자동적으로 권한상승 창이 뜰 수 있도록 하는 것은 매우 중요합니다. 그런데 Visual Studio 2005 조차도 이러한 정보를 단숨에 실행파일에 추가하는 손쉬운 방법을 제공하지는 않습니다. (1. 아래 내용을 보면 아시겠지만 그렇다고 매우 복잡한것도 아닙니다. 2. 한편으로 보면 이는 매우 당연합니다. Visual Studio 2005가 Vista보다 미리 출시되었을 뿐더러 이러한 manifest를 추가하는 것은 단순히 특수한 type의 resource를 추가하는 것 이상의 동작이 아니기 때문입니다.) 게다가 managed code를 개발하느냐 혹은 C/C++와 같이 native code를 개발하느냐에 따라 그 방법이 서로 상이하기 때문에 조금은 혼돈스러울 수 있습니다. 앞서 말한 이러한 제약사항(본 어플리케이션은 반드시 Administrators 권한이 필요하다와 같은)은 manifest 라는 파일에 기록되게 되며, manifest 파일들은 실행파일에 추가(embedding)될 수 있습니다. manifest 파일의 일반적인 구조는 다음과 같습니다. 이 파일은 '실행파일명.exe.manifest' 라는 파일로 저장하는 것이 좋습니다. 'MyApp.exe'가 실행파일명이라면 'MyApp.exe.manifest'로 저장하시면 됩니다.
이제 실질적인 3가지 절차를 알아 봅시다.
1. 'Step by Step' 방법
먼저 '실행파일명.rc' 라는 이름의 빈파일을 만듭니다. 'MyApp.rc'와 같이 만들면 됩니다. 아래와 같은 내용을 적습니다.
위 의미는 RT_MANIFEST 형 resource로 APP_MANIFEST 라는 이름의 identifier를 "MyApp.exe.manifest" 라는 내용을 정의한다라는 의미입니다.(manifest 형 resource 구분자의 값은 항상 1로 정의하는 것이 좋습니다. (참고적으로 파일내에 RT_MANIFEST 를 정의하는 대신 #include <winuser.h> 를 포함시키는 것도 좋은 방법입니다. 하지만 이 경우 winuser.h 파일의 위치를 정의하기 위하여 추가적인 명령들을 설정해야할 수 있습니다. 또한 MyApp.exe.manifest 파일을 rc 파일과 분리된 파일로 두지 않고 rc 파일내에 쓸 수도 있습니다.) 이제 rc 파일을 컴파일하여 res 파일을 만듭니다. 컴파일 하는 방법은 다음과 같은 두가지 방법 중 한가지를 사용하면 됩니다.
이제 컴파일된 resource를 실행파일에 추가하기 위한 절차를 수행합니다. 다음과 같은 2가지 방법이 있을 수 있습니다.
2. mt.exe를 활용하는 방법
mt.exe 를 이용하면 이미 생성된 실행파일에 manifest 파일을 embedding할 수 있습니다. mt.exe를 활용하는 방법에도 2가지 방법이 있을 수 있습니다.
3. Manifest Tool을 이용하는 방법
Visual Studio 2005를 이용하여 C++ 어플리케이션을 개발하고 있다면, 좀 더 손쉽게 manifest 파일을 embedding할 수 있습니다. project properties를 선택하고 Configuration Properties->Manifest Tool을 선택한 후, Input and Output을 선택합니다. Additional Manifest Files 에 'MyApp.exe.manifest' 와 같이 manifest 파일명을 입력하면 됩니다.
결론 이러한 3가지 방법중에 각각 선호하는 방법을 선택하면 되겠습니다만, 2번 방법을 이용하는 것이 가장 간단하면서도, managed/native의 구분없이 사용할 수 있으므로 가장 적절하지 않을까 생각됩니다.
다음 Link를 참고하십시오. Developer Best Practices and Guidelines for Applications in a Least Privileged Environment .Net Security Blog : Adding a UAC Manifest to Managed Code The Moth: Vista: User Account Control How To: Tell Vista's UAC What Privelege Level Your App Requires
|
카테고리
이글루 파인더
라이프 로그
이글루 링크
erehwon.LAB
미친병아리가 삐약삐약 소스코드위를 걷다..... 영원히 살 것처럼 꿈을 꾸.. zoops 이야기 전기쓰레빠의 매트릭스 Junghwan and Miny.. ~★~ 우하하!!~ 프로.. [ catch me if you ca.. 블로그 옮김 -> fribirdz.. 디지털을 말한다 by oojoo 더머&채니이야기 견우의 블로그 .. 이상훈의 사는 이야기 내일은 내일의 바람이 분다. 텅빈하늘 똥강아지가 멍멍~ Atelier 기억속으로 날다(Walki.. 애자일 이야기 MUSIC쟁이 부흥강사 .. - Last Paromix - Keep going with me 최근 등록된 덧글
_s secure function ..
by MuMbi준환 at 07/03 http://flytgr.tistory.co.. by 미친감자 at 07/02 나올수나 있을지..그리.. by river88 at 07/01 티맥스 윈도.. 그냥 비스.. by 지나가는 관객 at 07/01 진짜 걱정됩니다. 제발 .. by 아 at 06/30 최근 등록된 트랙백
티맥스 윈도우 스크린샷..
by The Story of A Strang.. free7942g의 생각 by free7942g's me2DAY 프로그래머 by ego+ing 사진찍는프로그래머의 생각 by eslife's me2DAY 제프리 리처의 Windows .. by 김재호의 디지털보단 아.. 이전 블로그
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월 |