Programming/C#2011. 11. 9. 08:43
DB와 응용프로그램 사이에서, 공간질의나, 공간 타입등을 지원하는 미들웨어를 개발하는 중에,
개발 중인 프로젝트가 서비스 모드로 동작하는 것이, Vista이후 OS에서 권한문제가 발생하는 것을 알았다. 
해결책을 위해서 구글링을 좀 했는데, 항상 그렇듯이 삽질이 힘들뿐 알면 간단하더라,

일단 프로그램이 OS에서 관리자의 권한이 필요한 기능을 수행하려 한다면, 프로젝트에 매니페스트 파일을 추가하고, 프로그램의 권한을 상승시키면 해결된다. 아래 그림을 보자. 

우선 권한 상승하려는 프로젝트의 속성에서 보안 탭을 누른다. 보안 탭에서 "ClickOnce 보안 설정 사용"을 체크했다가, 해제하면, 프로젝트 Properties 트리에 app.manifest 파일이 생성된다.


app.manifest파일을 눌러보면, 아래와 같이 Xml형식의 설정 내용이 등장한다~
 

여기서 주석되어 있는 이 부분이 중요하다.

<requestedExecutionLevel  level="asInvoker" uiAccess="false" />
<requestedExecutionLevel  level="requireAdministrator" uiAccess="false" />
<requestedExecutionLevel  level="highestAvailable" uiAccess="false" />

3가지 노드의 내용은 다음과 같다.   - 출처 : http://blog.naver.com/hakunamata2?Redirect=Log&logNo=90015914163

asInvoker - 어플리케이션이 부모 프로세스와 동일한 토큰으로 실행.
highestAvailable - 어플리케이션이 현재 사용자가 사용할 수 있는 최고 권한으로 실행.
requireAdministrator - 어플리케이션이 관리자에 대해서만 실행되므로 관리자의 전체 토큰으로 어플리케이션을 시작해야함

관리자 권한 실행을 위해서 주석 아래의 <requestedExecutionLevel  level="asInvoker" uiAccess="false" /> 
<requestedExecutionLevel  level="requireAdministrator" uiAccess="false" />로 변경해주고, 수행하면된다. 
 
출처 : http://totjang.tistory.com/35
Posted by Mocker