프로그램이 시작될 때 관리자 권한을 요청하는 방법은 무엇입니까?


81

Windows Vista에서 관리자 권한으로 소프트웨어를 실행하려면 소프트웨어가 필요합니다 (관리자 권한없이 실행하면 충돌이 발생합니다).

다른 소프트웨어를 실행할 때 "이 소프트웨어는 관리자 권한으로 실행됩니다. 계속 하시겠습니까?"와 같은 메시지가 시스템에서 표시되는 것을 보았습니다. 앱이 관리자 권한을 얻으려고 할 때.

Windows Vista에서 C # 앱을 실행할 때 관리자 권한을 요청하려면 어떻게합니까?


6
이렇게하면 근본적인 문제가 숨겨 질뿐 고쳐지지 않는다는 것을 잊지 마십시오. 프로그램에 실제로 관리자 권한이 필요하더라도 권한을 얻지 못해도 충돌하지 않아야합니다. 가장 가능성이 높은 원인은 시스템 호출 후 오류 조건을 확인하지 못했기 때문입니다.
Harry Johnston

답변:


143

매니페스트 파일에 다음을 추가합니다.

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

highestAvailable레벨 에도 사용할 수 있습니다 .

매니페스트 파일을 포함하는 방법은 다음과 같습니다.

http://msdn.microsoft.com/en-us/library/bb756929.aspx

추신 : 매니페스트 파일이없는 경우 쉽게 새 파일을 추가 할 수 있습니다.

Visual Studio에서 프로젝트-> 항목 추가-> 응용 프로그램 매니페스트 파일 선택 (Visual C # 항목의 일반 아래)을 마우스 오른쪽 단추로 클릭합니다.

추가 된 파일이 이미 단지의 레벨 변경, 위의 부분이있을 것이다 requireAdministrator으로부터를asInvoker


2
언급 할 가치가있는 것은 이러한 방식으로 VS에 애플리케이션 매니페스트 파일을 추가하면 다른 많은 옵션이 포함 된 템플릿을 얻을 수 있다는 것입니다 (예 : 앱이 Windows 10 이상에서만 작동한다고 말함). VS2017에서 테스트되었습니다.
Per Lundberg

원래는 이것에 대해 물어 보지 않았다 - 어 물어 때문에 가치가 대한 언급은 - - @PerLundberg 그는 관리자 권한에 대한 질문
Momoro

3
@Momoro의 질문은 OP뿐 아니라 커뮤니티의 더 큰 이익을위한 것입니다. 다른 솔루션을 찾을 때 다른 사람들뿐만 아니라,이 질문을 찾을 수 있습니다 정확히 영업 이익에 대해 무엇을 요구. 그리고 일반적으로 사람들에게 "응용 프로그램 매니페스트를 사용하여 이러한 작업을 수행 할 수 있습니다"에 대해 가르치는 것은 문제가되지 않습니다.
Per Lundberg

나는 무례 아무것도 의미하지 않은 (죄송하지만 지금은 그런 식으로 가로 질러 온 경우) 그냥 오래된 답변 / 질문에 독서되었고, 종류 혼란의 있어요 : D
Momoro

14

이 XML을 yourexename.exe.manifest라는 파일에 넣습니다.

<assembly xmlns="urn:schemas-microsoft-com:asm.v1" manifestVersion="1.0>
<trustInfo xmlns="urn:schemas-microsoft-com:asm.v3">
   <security>
     <requestedPrivileges>
        <requestedExecutionLevel level="highestAvailable" />
     </requestedPrivileges>
   </security>
</trustInfo>
</assembly>


-1

F # Visual Studio 2013의 경우 /win32manifest다음과 같이 FSharp 컴파일러의 플래그를 사용하여 관리자 권한 상승을 요청하는 매니페스트 파일이 포함 되었습니다. 따라서 "App.Exe"라는 프로젝트 출력이 주어지면

  1. 프로젝트에 파일을 추가 할 수 있습니다 편의를 위해 다음과 같은 내용으로 파일을 (만듭니다. 그건 있는지 확인 Build Action입니다 None' and... 복사 출력에 is음주 복사하지 . By convention such a file is named App.Exe.manifest`를. 당신이있는 UIAccess (사용자 인터페이스)를 요구하는 경우, 어셈블리 강력한 이름이어야합니다.

    <?xml version="1.0" encoding="utf-8" ?>
    <asmv1:assembly manifestVersion="1.0" 
        xmlns="urn:schemas-microsoft-com:asm.v1"
        xmlns:asmv1="urn:schemas-microsoft-com:asm.v1"
        xmlns:asmv2="urn:schemas-microsoft-com:asm.v2"
        xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance">
      <assemblyIdentity version="1.0.0.0" name="App" />
      <trustInfo xmlns="urn:schemas-microsoft-com:asm.v2">
        <security>
          <requestedPrivileges xmlns="urn:schemas-microsoft-com:asm.v3">
            <requestedExecutionLevel level="requireAdministrator" uiAccess="false" />
          </requestedPrivileges>
        </security>
      </trustInfo>
    </asmv1:assembly>
    
  2. Other flags:다음을 포함 하도록 프로젝트 대화 상자 빌드 패널의 입력 필드를 편집합니다 /win32manifest:<ApplicationManifestFile>.. 예를 들어,이 경우 /win32manifest:App.Exe.manifest.

당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.