Microsoft MVP성태의 닷넷 이야기
VC++: 29. 필수 무결성 제어를 조절하는 방법(1) - Manifest 파일 이용 [링크 복사], [링크+제목 복사],
조회: 29172
글쓴 사람
정성태 (techsharer at outlook.com)
홈페이지
첨부 파일
(연관된 글이 4개 있습니다.)
(시리즈 글이 8개 있습니다.)
VC++: 29. 필수 무결성 제어를 조절하는 방법(1) - Manifest 파일 이용
; https://www.sysnet.pe.kr/2/0/445

VC++: 30. 필수 무결성 제어를 조절하는 방법(2) - 직접 코딩
; https://www.sysnet.pe.kr/2/0/446

VS.NET IDE: 43. .NET에서의 필수 무결성 제어 조절하는 방법 - Manifest 파일 이용
; https://www.sysnet.pe.kr/2/0/450

VS.NET IDE: 50. Orcas - UAC 설정 관련
; https://www.sysnet.pe.kr/2/0/507

개발 환경 구성: 320. Visual Basic .NET 프로젝트에서 내장 Manifest 자원을 EXE 파일로부터 제거하는 방법
; https://www.sysnet.pe.kr/2/0/11228

VS.NET IDE: 122. 비주얼 스튜디오에서 관리자 권한을 요구하는 C# 콘솔 프로그램 제작
; https://www.sysnet.pe.kr/2/0/11318

개발 환경 구성: 572. .NET에서의 필수 무결성 제어 - 외부 Manifest 파일을 두는 방법
; https://www.sysnet.pe.kr/2/0/12634

VS.NET IDE: 181. Visual Studio - C/C++ 프로젝트에 application manifest 적용하는 방법
; https://www.sysnet.pe.kr/2/0/13304





필수 무결성 제어(MIC: Mandatory Integrity Control, 신뢰도 등급)을 조절하는 방법(1) - Manifest 파일 이용


Windows XP 시절에는 Manifest 파일을 거의 다루질 않았지요. Side-by-side 기능이 지원되는 DLL들을 사용한다거나, 아니면 COM 개체를 클라이언트 컴퓨터의 레지스트리에 등록하지 않고 사용하기 위한 경우에만 특별히 Manifest 파일을 다루곤 했었습니다.

개인적으로도, manifest 파일을 이용하면 COM 개체 등록이 필요 없어서 참 유용하다 싶어서 좀 해봤었는데요. 심지어 .NET 프로젝트에서도 COM 개체 참조를 하지 않고 COM 개체에 대한 manifest 파일을 참조하는 것이 가능해서 참 매력적으로 다가왔던 기술이었습니다. (그런데, 애석하게도 ASP.NET에서는 사용할 수가 없었습니다. IIS 7에서는 좀 바뀔지 모르겠지만... 혹시 ASP.NET에서 COM 개체 참조를 manifest 파일로만 하는 방법을 아는 분 계신가요? ^^) 일단은 이에 대해서는 나중에 시간날 때 다뤄 보도록 하고.

자, 이렇게 이전 Windows XP까지만 해도 manifest 파일은 사실 알아도 그만, 몰라도 그만이었는데요. 비스타가 나온 지금에는, UAC 확인창을 명시적으로 띄우기 위해서 이 "Manifest" 파일이 꼭 필요한 요소로 자리매김하게 되었습니다.

물론, 직접적인 코딩으로도 가능하지만. manifest 파일을 직접 다루는 것이 더 쉽기 때문에 아마도 많은 분들이 이 방식을 선호하시게 될 것 같습니다.

서론은 그만 두고. 직접 한번 같이 실습을 해볼까요? ^^ 미리 말씀드리면, manifest 파일은 exe 파일에 "리소스"로 포함하는 방법과, 외부 파일로 분리하는 방법으로 나뉘어 제공됩니다. 여기서는 그 두가지 방법 모두를 함께 알아보도록 하겠습니다.




1. VS.NET 2005를 이용해서 Visual C++ Win32 Console 프로젝트를 하나 만듭니다.

2. 해당 콘솔 프로젝트가 생성된 폴더에 다음과 같은 내용의 파일을 "add.manifest" 파일 이름으로 저장합니다. (파일명이나 폴더 경로는 임의로 정해도 됩니다.)

<?xml version="1.0" encoding="UTF-8" standalone="yes"?>
<assembly xmlns="urn:schemas-microsoft-com:asm.v1" manifestVersion="1.0"> 
  <ms_asmv2:trustInfo xmlns:ms_asmv2="urn:schemas-microsoft-com:asm.v2">
    <ms_asmv2:security>
      <ms_asmv2:requestedPrivileges>
        <ms_asmv2:requestedExecutionLevel
          level="requireAdministrator"
          uiAccess="false"/>
        </ms_asmv2:requestedPrivileges>
       </ms_asmv2:security>
  </ms_asmv2:trustInfo>
</assembly>

3. 이제, 프로젝트 속성창에서 다음과 같이 "Additional Manifest Files"에 "add.manifest" 파일을 지정해 줍니다.

vcpp8_manifest_ext_int_1.png

4. 자, 모든 준비는 끝났습니다. 이제 빌드한 후 생성된 exe 파일을 실행시키면 "UAC 확인창"이 뜨는 것을 확인할 수 있습니다. 또한 친절하게도, 생성된 EXE 파일의 아이콘을 보게 되면 다음 화면과 같이 "관리자 권한"이 필요하다는 것을 알리는 방패 그림이 추가됩니다.

vcpp8_manifest_ext_int_3.png




위에서 설명한 방식이 manifest 파일을 리소스에 포함시킨 것입니다. 따라서, 이렇게 개발이 된 후에는 단일 exe 파일을 배포함으로써 동작이 가능하게 됩니다.

이제 방식을 달리해서, manifest 파일을 리소스로 포함하지 않고 외부로 빼도록 해보겠습니다. 방법은 매우 간단합니다. 다음 화면과 같이 manifest 파일을 외부에 지정하도록 프로젝트 속성창에서 "Embed Manifest" 옵션을 조정해 준 후 빌드를 해주면 끝입니다.

vcpp8_manifest_ext_int_2.png

그러면, "출력 폴더"에 다음과 같이 manifest 파일을 포함하고 있는 것을 확인할 수 있습니다.

vcpp8_manifest_ext_int_4.png

즉, 이렇게 되면 배포도 "UacWin32Console.exe", "UacWin32Console.exe.manifest" 파일을 모두 배포해 줘야 합니다. 어느 것을 선택해야 하는지는 여러분들의 응용 프로그램 배포 요구 사항에 의존할 것입니다.

* 첨부 파일은 위의 실습을 포함한 예제 프로젝트입니다.


[내용 수정: 2007-02-08]
trustInfo 노드에 이름없는 기본 네임스페이스 방식을 취하지 않고 ms_asmv2 네임스페이스 이름을 지정해 준 것은 나름대로 이유가 있습니다. 이에 대해서는 다음의 토픽을 참고하십시오.

Exploring Manifests Part 2: Default Namespaces and UAC Manifests in Windows Vista 
; https://techcommunity.microsoft.com/t5/windows-blog-archive/exploring-manifests-part-2-default-namespaces-and-uac-manifests/ba-p/228416
지금은 XP에 패치가 된 것으로 알고 있는데, 그 이전에는 위와 같은 문제로 인해서 동일한 프로그램이 XP에서 실행될 때는 다운이 되더라는 글을 어디선가 읽은 기억이 납니다.



[이 토픽에 대해서 여러분들과 의견을 공유하고 싶습니다. 틀리거나 미흡한 부분 또는 의문 사항이 있으시면 언제든 댓글 남겨주십시오.]

[연관 글]






[최초 등록일: ]
[최종 수정일: 11/15/2024]

Creative Commons License
이 저작물은 크리에이티브 커먼즈 코리아 저작자표시-비영리-변경금지 2.0 대한민국 라이센스에 따라 이용하실 수 있습니다.
by SeongTae Jeong, mailto:techsharer at outlook.com

비밀번호

댓글 작성자
 




... 181  182  183  [184]  185  186  187  188  189  190  191  192  193  194  195  ...
NoWriterDateCnt.TitleFile(s)
354정성태10/23/200635839    답변글 개발 환경 구성: 18.1. 윈도우즈 인증서 서비스 설치
372정성태12/31/200637682    답변글 개발 환경 구성: 18.2. 웹 사이트에 SSL을 적용 [3]
373정성태10/24/200629073    답변글 개발 환경 구성: 18.3. 사용자 입장에서의 HTTPS 접근 (1)
374정성태10/25/200626340    답변글 개발 환경 구성: 18.4. 사용자 입장에서의 HTTPS 접근 (2)
391정성태11/7/200630467    답변글 개발 환경 구성: 18.5. 사용자 인증서 발급
392정성태11/11/200643740    답변글 개발 환경 구성: 18.6. 인증서 관리 (1) - 내보내기/가져오기
394정성태11/9/200628232    답변글 개발 환경 구성: 18.7. 인증서 관리 (2) - 개인키를 내보낼 수 있는 유형의 인증서 발급 [1]
395정성태11/9/200640334    답변글 개발 환경 구성: 18.8. 인증서 관리 (3) - 인증서 MMC 관리자 사용
414정성태12/23/200632023    답변글 개발 환경 구성: 18.9. CRL(Certificate Revocation List) 관리
428정성태12/31/200644936    답변글 개발 환경 구성: 18.10. IIS 7 - SSL 사이트 설정하는 방법 [4]
429정성태12/31/200630868    답변글 개발 환경 구성: 18.11. 서비스를 위한 인증서 설치
352정성태10/2/200620566개발 환경 구성: 17. VPC에 Linux 설치하는 방법 [1]
351정성태10/8/200623102개발 환경 구성: 16. 성태의 무식한(!) 리눅스 탐방기. [4]
349정성태9/26/200621891디버깅 기술: 10. C++/CLI에서 제공되는 명시적인 파괴자의 비밀
347정성태10/6/200625665디버깅 기술: 9. .NET IDisposable 처리 정리 [1]
346정성태9/23/200619193개발 환경 구성: 15. 툴박스에 컨트롤이 자동으로 나타나도록 해주는 옵션 설정
345정성태9/20/200618359오류 유형: 12. WCF 오류 메시지 - Error while trying to reflect on attribute 'MessageContractAttribute'
343정성태10/18/200630204개발 환경 구성: 14. SandCastle 사용법 (NDoc을 대체하는 문서화 도구) [1]파일 다운로드1
344정성태9/20/200620463    답변글 개발 환경 구성: 14.1. 오류 유형 - GAC 에 등록된 DLL 에 대한 문서화 시 오류
340정성태9/15/200619638개발 환경 구성: 13. ISO 파일을 가상 CD-ROM으로 매핑해주는 프로그램
339정성태9/14/200619109오류 유형: 11. ProtocolsSection?
338정성태2/4/200727367개발 환경 구성: 12. BUG: 웹 서비스에서 DataTable 사용하기 [2]파일 다운로드1
350정성태10/2/200620577    답변글 개발 환경 구성: 12.1. ASMX 2.0 and SchemaImporterExtensions파일 다운로드1
335정성태8/20/200628307디버깅 기술: 8. COM+ 서버 응용 프로그램에 대한 F5 디버깅 방법
334정성태8/20/200623529디버깅 기술: 7. VS.NET 2003/2005의 다중 프로젝트 디버깅
333정성태8/20/200624028개발 환경 구성: 11. COM+ 서버 활성화 보안 설정
... 181  182  183  [184]  185  186  187  188  189  190  191  192  193  194  195  ...