본문 바로가기

Delphi/C++Builder

[XE3] 관리자 권한으로 실행 - Project Options 사용

UAC가 적용된 윈도우에서 레지스트리나 서비스 등을 제어하기 위해서는 어플리케이션을 관리자 권한으로 실행 해야 합니다.

보통 오른쪽 마우스 버튼의 "관리자 권한으로 실행" 메뉴를 이용하면 아래와 같이 확인창이 뜨지요.



하지만 고객에게 우측마우스로 관리자 권한으로 실행해 주세요. 할 수는 없기에 실행하면 무조건 관리자 권한으로 실행되도록 해야 합니다. 

관리자 권한으로 실행되는 프로그램은 아래의 그림 우측과 같이 방패 아이콘이 표시가 됩니다.


관리자 권한으로 실행하는 프로그램을 작성하기 위해서는

프로젝트 리소스에서 Manifest를 변경하고 적용해야 합니다.


예전 버전의 델파이(델파이 7, 2007)로 설명된 글들이 몇개 보이지만 다소 복잡하기도 해서

정말 쉽게 사용할 수 있는 방법 공유합니다.


아래 예제는 Delphi XE3 기준으로 작성되었구요

하위 버전에서는 잘 될지 모르겠네요.(아... 무책임 하여라..)


| Manifest 파일 작성


1, 프로젝트 생성

프로젝트를 생성하고 프로젝트 파일(*.dpr)이 저장된 경로를 보시면 프로젝트 명과 동일한 리소스 파일(*.res)이 있습니다.



2, 리소스 파일 오픈

리소스 에디터로 리소스파일을 열어봅니다.

리소스 에디터?

 - 리소스 파일을 편집할 수 있는 툴, 다양한 무료 툴들이 있음

 - 제가 사용하는 XN Resource Editor(http://www.wilsonc.demon.co.uk/d10resourceeditor.htm)

    (https://stefansundin.github.io/xn_resource_editor/)

리소스?

 - 어플리케이션에 아이콘, 이미지, 커서, 데이터 등을 포함하기 위한 파일일

 - 델파이에서는 Project > Resources and Images... 메뉴를 통해 이용할 수 있다.


그럼 아래의 좌측 메뉴에서  XP Theme Manifest 항목을 선택하고 하위 메뉴를 선택하면 화면과 같은 XML이 표시됩니다.


3, Manifest 내용 복사 후 파일 생성

리소스 에디터의 Manifest XML 내용을 복사합니다.

프로젝트의 경로에 프로젝트명.manifest(파일명은 임의로 입력하셔도 상관 없음) 파일을 만들고  XML내용을 붙여 넣고 아래와 같이 수정합니다.


requestedExecutionLevel의 level 변경(asInvoker -> requireAdministrator)

<requestedExecutionLevel

          level="requireAdministrator"

          uiAccess="false"/>

        </requestedPrivileges>



| Manifest 적용


1, 프로젝트 옵션에서 Manifest 적용

델파이 IDE로 이동하여 프로젝트 옵션을 열고 Application 항목으로 이동합니다.


2, Custom Manifest 설정

[Runtime Themes]의 콤보박스를 Use custom manifest로 변경하고 활성화된 Custom Manifest를 위에서 만든 reqAdmin.manifest파일을 선택합니다.


3. 컴파일 및 팁

위의 옵션을 적용하고 컴파일을 하면 생성된 실행파일에 방패가 생기고 실행 시 관리자 권한을 자동으로 질의 합니다.


하지만 관리자 권한으로 실행 시 디버깅이 안된다는 문제점이 있습니다.

큰 문제는 아니지만 빠르게 개발할 때 많이 불편하지요.


그래서 저는 컴파일 타겟으로 구분을 했습니다.

 - Release 모드인 경우 Runtime Themes를 Use custom manifest 선택 후 적용하고

 - Debug 모드인 경우 Runtime Themes를 Enable runtime themes로 선택하여 디버깅 가능하게 했습니다.


위와 같이 사용하는 경우 

Release 모드로 컴파일 하는 경우 F9로 실해이 되지 않고 실행파일로 실행을 하는 반면 관리자 권한으로 실행됩니다.

Debug 모드로 컴파일 하는 경우 디버깅이 가능하지만 관리자 권한을 사용하는 기능을 사용하지 못한답니다.

간단한 UI 수정할때 사용하면 좋을 것 같네요^^


그럼 오늘도 끝~