본문 바로가기
개발

[C#]응용 프로그램 권한상승하기

by 비손 2009. 8. 21.

이 문제를 왜 고민하게 됐는고 하니…
SendMessage를 사용하려고 하는데 자신보다 권한이 높게 설정된 프로그램에는 메시지를 보낼 수 없는 문제가 생겼습니다.
UAC라고… 윈도우 Vista에 추가된 그 기능 때문에 프로그래머들은 한층 더 골치가 아프게 됐네요.
구글링도 해보고 여러가지 방법을 찾던 차에 매니페스트를 추가하면 된다는 사실을 알게 됐습니다.
그리고 VS2008부터 생긴 기능인지는 모르지만(전에는 고민해 본적이 없으니까요) 매니페스트를 VS자체에서 추가할 수 있더군요.
제가 검색했던 다른 사이트들은 mt.exe 파일로 어떻게 어떻게 해서 exe파일에 붙이고 하더군요 -_-;
그걸 토대로 봤을 때… VS2008부터 이 기능이 생기지 않았나… 추측해 봅니다.

프로젝트의 속성으로 들어가서 '보안' 탭을 누르고 'ClickOnce 보안 설정 사용'에 체크를 해 봅시다. (기본으로 체크가 안되어 있습니다.)
그러면 오른쪽에 솔루션 탐색기에 'app.manifest'라는 파일이 생깁니다… 놀랍게도 -_-;
저도 이걸 모를 때는 그냥 manifest파일을 다른 사이트에서 만드는 것처럼 만들었는데, 자동으로 만들어 주니 어찌나 편한지…
그리고 ClickOnce를 안 쓰실 분들은 그냥 안쓰면 되니까~ ㅎ 체크를 다시 지워도 해당 manifest파일이 사라지지는 않습니다.

그리고는 '응용 프로그램'탭으로 가보면 '매니페스트'가 자동으로 추가된 것을 볼 수 있습니다.
원래는 '기본 설정으로 구성된 매니페스트 포함'으로 되어 있습니다.

자… 그러면 추가된 매니페스트 파일을 열어봅시다. 'Properties/app.manifest'겠죠?

주석에 보면 친절하게도 설명이 적혀 있습니다.
<requestedExecutionLevel level="asInvoker" uiAccess="false" />
<requestedExecutionLevel level="requireAdministrator" uiAccess="false" />
<requestedExecutionLevel level="highestAvailable" uiAccess="false" />

주석 밑에 있는 값을 얘들중에 하나로 바꾸라고… 그냥 'requireAdministrator'로 바꾸면 되는 듯 합니다.
권한에 대해서는 개인적으로 검색을 해 보시면 됩니다.

이렇게 하시면 자동적으로 프로그램이 권한상승이 됩니다!!! 참 쉽죠잉?

음… 참고로 VS2008이 관리자 권한으로 실행되어 있지 않은 경우, 관리자 권한으로 올린 프로그램은 디버깅이 안되더군요~