본문 바로가기

Programming/VB 2010 강좌

프로그램에 관리자권한 할당하기




제가 아무리찾아봐도

프로그램의 관리자권한 부여를 못찾겠더라고요....


관리자권한 아시죠?

윈도우Vista 부터 적용된 기능으로,

프로그램은 관리자가 아닌 권한을 얻습니다.

관리자보다 약간 적은 권한을 얻게됩니다.


그래서 일반적인 방법으로 컴파일한 프로그램은

C:\Program Files / C:\Windows 에 파일을 기록할 수 없고,

환경변수나 등등 시스템에 큰 영향이 가는 일은 하지 못합니다.


이렇게 한 이유는 바이러스나 악성코드 때문이죠.

윈도우XP까지만해도 프로그램은 무조건 관리자권한을 얻었습니다.

그래서 개발자가 마음만먹으면

시스템의 주요환경을 변경해버리고

중요파일을 지우고

시스템을 뒤집어놓을수 있었습니다.


하지만 윈도우Vista 부터는

프로그램이 관리자권한을 요청하면

프로그램이 관리자권한을 취득하게할지 허락을 받습니다.

그 허락을 받는것을

UAC(User Account Control) 이라고합니다. (한국어로는 '사용자 계정 컨트롤')

이게바로

프로그램이 관리자권한을 얻을수있는지

허락을 받는 창입니다.

저기서 '예' 를 눌러야

프로그램은 관리자권한을 얻고 정상적으로 실행이 됩니다.

'아니요' 를 누르면 프로그램은 실행되지 않습니다.









근데 이거를 비주얼베이직.NET 에서는 어떻게 구현할까요?



여기 간단한 방법이 있습니다.








먼저, 프로젝트 하나를 엽니다(당연하지)






그리고 '솔루션 탐색기' 에서 'My Project' 를 더블클릭 해주세요.





그리고 저기

'WIndows 설정 보기(G)' 를 눌러주세요!







그러면 이런 XML 파일이 나타납니다!






저기 제가 써놨지만 여기도 올려봅니다.






<requestedPrivileges xmlns="urn:schemas-microsoft-com:asm.v3">

        <!-- UAC 매니페스트 옵션
             Windows 사용자 계정 컨트롤 수준을 변경하려면 
             requestedExecutionLevel 노드를 다음 중 하나로 바꾸십시오.

        <requestedExecutionLevel  level="asInvoker" uiAccess="false" />                             <일반권한
        <requestedExecutionLevel  level="requireAdministrator" uiAccess="false" />                  <관리자권한
        <requestedExecutionLevel  level="highestAvailable" uiAccess="false" />                      <마스터권한

            requestedExecutionLevel 노드를 지정하면 파일 및 레지스트리 가상화가 사용되지 않습니다.
            이전 버전과의 호환성을 위해 파일 및 레지스트리 시각화를 사용하려면 
            requestedExecutionLevel 노드를 삭제하십시오.
        -->



        <requestedExecutionLevel  level="requireAdministrator" uiAccess="false" />            <!-- <<<<<저기를 바꿔주면 됨-->
        
        

      </requestedPrivileges>









저기서


        <requestedExecutionLevel  level="requireAdministrator" uiAccess="false" />               <!-- <<<<<저기를 바꿔주면 됨-->


이부분을 바꿔주시면 권한이 변경됩니다!



일반적인 권한(기본값) 을 부여하고 싶다면

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

이걸 넣으면되고,





관리자권한을 부여하고 싶다면

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

이렇게 넣어주면 됩니다.






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

라고 넣으면 최대한 높은 권한이 부여되지만,

관리자권한과 거의 같습니다.

되도록 관리자권한을 사용하는것을 추천합니다.







한번 관리자권한으로 바꾸고 디버그해봅시다!







그러면 이런창이 표시됩니다!

이 창은

비주얼 스튜디오가 높은 권한을 가지지 않아서 실행시킬수 없는 문제입니다.

저기 "다른 자격 증명을 사용하여 다시 시작"

을 눌러주세요.







그러면 비주얼스튜디오가 종료되고

다시 실행되면서 관리자 권한을 요청합니다.







아까 그 프로젝트가 자동으로 로드되고!




다시 디버그를 누르면!





정상실행이 됩니다.

일반적인 방법으로 파일을 실행시키면 어떻게되는지 볼까요?




아까 그 EXE파일을 탐색기로 실행시키면!





이렇게! 관리자권한을 묻는창이 표시됩니다!


저기 "게시자를 알수없는 응용프로그램이..."라고 뜨는이유는

프로그램 자격 증명서가 없기때문입니다.

자격 증명서은 어떻게 얻냐고요?

인증된기관에 돈주고 인증받아야해요... (ㅡㅡ)



저렇게 관리자권한을 부여하면!


C:\Program Files 에 접근할수도있고

C:\Windows 에 접근할수도 있고

기타등등의 기능을 모두 사용할수 있습니다!