Microsoft MVP성태의 닷넷 이야기
글쓴 사람
정성태 (techsharer at outlook.com)
홈페이지
첨부 파일
 
부모글 보이기/감추기
(연관된 글이 1개 있습니다.)
[답변] 클릭원스 - 요청한 작업을 수행하려면 권한 상승이 필요합니다. (Exception from HRESULT: 0x800702E4)

이 글은, 다음 글에서 댓글로 작성한 "정중희" 님의 상황에 대한 해결책입니다.

ClickOnce - 관리자 권한 상승하는 방법
; https://www.sysnet.pe.kr/2/0/950

(요청하신 대로, 정중희 님 댓글의 IP 주소는 "..."로 처리를 했습니다.
그런데, 오히려 ^^ IP 주소를 노출시켜주셔서 문제를 찾을 수 있었군요.)

제가 한번 그 URL로 방문을 해보았는데, 실제로 오류가 나더군요. 클릭원스 모듈을 다운로드한 폴더에 가보니 다음과 같이 모듈이 있는 것을 확인했습니다.

clickonce_elevated_problem_1.png

뭔가... 좀 이상하지 않나요? ^^
위에서 EXE 파일에 '방패' 아이콘이 추가되어 있는데, 즉 권한 상승을 위한 설정이 강제로 되어 있다는 것을 뜻합니다. 재미있는 상황이군요. ^^

배경 설명을 먼저 해보면.

Vista가 나오면서, UAC 문제가 골치아프게 된 곳이 바로 "setup.exe" 파일이었습니다. 대부분의 setup 프로그램들이 관리자 권한을 필요로 하는데 사용자로 하여금 명시적으로 "run as an administrator" 메뉴를 실행하도록 하는 것이 너무 현실성이 없다는 점이었습니다.

그래서, Vista(물론, Windows Server 2008도 포함해서.)에서는 대상 EXE 파일이 다음과 같은 조건을 만족하면 UAC 권한 상승창을 자동으로 띄우도록 했습니다.

  • x86 응용 프로그램이고,
  • 실행 프로그램 이름에 "Setup", "install", "update", "patch"... 등등의 문자열이 포함되고,
  • manifest 파일에 requestedExecutionLevel 요소를 명시적으로 포함하고 있지 않은 경우!

위의 3박자가 맞으면, Vista 운영체제는 해당 프로그램이 실행될 때 UAC 권한 상승창을 사용자에게 보여줍니다. 눈치채셨겠지만, 이러한 조건들이 "정중희" 님의 상황과 일치하고 있습니다.

Visual Studio 2005의 경우, Vista 이전에 나온 개발 도구라서 app.manifest에서 requestedExecutionLevel을 명시적으로 포함시켜 주지 않고 있으며, 하필 "정중희" 님이 택한 실행 파일 이름이 "SetupSecurity"이고, 대상 플랫폼이 x86으로 되어 있기 때문에 그런 문제가 발생하는 것입니다.

위의 조건에 더해서, "클릭원스"는 UAC 권한 상승을 발생하는 exe를 무조건 실행하지 못하도록 설정되어 있기 때문에 "정중희" 님의 상황에서는 Process.Start 코드를 통한 추가 코드 여부에 상관없이 그와 같은 오류가 발생하는 것입니다.

이를 해결하는 방법은 간단합니다. 대상 플랫폼이야 사용자 운영체제에 의존적이니 바꿀 수 없지만, 실행 파일명에서 "Setup" 글자를 빼거나 "manifest" 파일에 명시적으로 다음과 같이 requestedExecutionLevel을 포함해서 배포해주면 됩니다.

==== app.manifest ====
<?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">
  <trustInfo xmlns="urn:schemas-microsoft-com:asm.v2">
    <security>

      <requestedPrivileges xmlns="urn:schemas-microsoft-com:asm.v3">
        <requestedExecutionLevel level="asInvoker" uiAccess="false" />
      </requestedPrivileges>      
      
      <applicationRequestMinimum>
        <defaultAssemblyRequest permissionSetReference="Custom" />
        <PermissionSet class="System.Security.PermissionSet" version="1" Unrestricted="true" ID="Custom" SameSite="site" />
      </applicationRequestMinimum>
    </security>
  </trustInfo>
</asmv1:assembly>

아마도, Visual Studio 2008 이상의 제품을 사용하셨다면,,, 이 정도 시간 낭비는 없으셨을 텐데... ^^

[연관 글]






[최초 등록일: ]
[최종 수정일: 6/28/2023]

Creative Commons License
이 저작물은 크리에이티브 커먼즈 코리아 저작자표시-비영리-변경금지 2.0 대한민국 라이센스에 따라 이용하실 수 있습니다.
by SeongTae Jeong, mailto:techsharer at outlook.com

비밀번호

댓글 작성자
 



2010-11-30 12시26분
[정중희] 친절하게 "정중희" 란 저의 이름을 여러번이나 호명하여 주셔서 영광입니다.
일목요연한 설명이 하나를 배우면 열을 배우고 싶은 열정을 주시네요.
"정성태"님의 도움에 감사의 말씀을 드립니다.
[guest]
2010-12-03 02시31분
[저는 누구일까요?] 햐~~~ 짝짝짝
[guest]

1  2  3  4  5  6  7  8  9  10  [11]  12  13  14  15  ...
NoWriterDateCnt.TitleFile(s)
13364정성태6/8/20233946.NET Framework: 2127. C# - Ubuntu + Microsoft.Data.SqlClient + SQL Server 2008 R2 연결 방법 [1]
13363정성태6/7/20233522스크립트: 49. 파이썬 - "Transformers (신경망 언어모델 라이브러리) 강좌" - 1장 2절 코드 실행 결과
13362정성태6/1/20233453.NET Framework: 2126. C# - 서버 측의 요청 제어 (Microsoft.AspNetCore.RateLimiting)파일 다운로드1
13361정성태5/31/20233848오류 유형: 862. Facebook - ASP.NET/WebClient 사용 시 graph.facebook.com/me 호출에 대해 403 Forbidden 오류
13360정성태5/31/20233210오류 유형: 861. WSL/docker - failed to start shim: start failed: io.containerd.runc.v2: create new shim socket
13359정성태5/19/20233535오류 유형: 860. Docker Desktop - k8s 초기화 무한 반복한다면?
13358정성태5/17/20233896.NET Framework: 2125. C# - Semantic Kernel의 Semantic Memory 사용 예제 [1]파일 다운로드1
13357정성태5/16/20233729.NET Framework: 2124. C# - Semantic Kernel의 Planner 사용 예제파일 다운로드1
13356정성태5/15/20234084DDK: 10. Device Driver 테스트 설치 관련 오류 (Code 37, Code 31) 및 인증서 관련 정리
13355정성태5/12/20234001.NET Framework: 2123. C# - Semantic Kernel의 ChatGPT 대화 구현 [1]파일 다운로드1
13354정성태5/12/20234208.NET Framework: 2122. C# - "Use Unicode UTF-8 for worldwide language support" 설정을 한 경우, 한글 입력이 '\0' 문자로 처리
13352정성태5/12/20233838.NET Framework: 2121. C# - Semantic Kernel의 대화 문맥 유지파일 다운로드1
13351정성태5/11/20234327VS.NET IDE: 185. Visual Studio - 원격 Docker container 내에 실행 중인 응용 프로그램에 대한 디버깅 [1]
13350정성태5/11/20233587오류 유형: 859. Windows Date and Time - Unable to continue. You do not have permission to perform this task
13349정성태5/11/20233910.NET Framework: 2120. C# - Semantic Kernel의 Skill과 Function 사용 예제파일 다운로드1
13348정성태5/10/20233819.NET Framework: 2119. C# - Semantic Kernel의 "Basic Loading of the Kernel" 예제
13347정성태5/10/20234250.NET Framework: 2118. C# - Semantic Kernel의 Prompt chaining 예제파일 다운로드1
13346정성태5/10/20234076오류 유형: 858. RDP 원격 환경과 로컬 PC 간의 Ctrl+C, Ctrl+V 복사가 안 되는 문제
13345정성태5/9/20235479.NET Framework: 2117. C# - (OpenAI 기반의) Microsoft Semantic Kernel을 이용한 자연어 처리 [1]파일 다운로드1
13344정성태5/9/20236613.NET Framework: 2116. C# - OpenAI API 사용 - 지원 모델 목록 [1]파일 다운로드1
13343정성태5/9/20234511디버깅 기술: 192. Windbg - Hyper-V VM으로 이더넷 원격 디버깅 연결하는 방법
13342정성태5/8/20234396.NET Framework: 2115. System.Text.Json의 역직렬화 시 필드/속성 주의
13341정성태5/8/20234103닷넷: 2114. C# 12 - 모든 형식의 별칭(Using aliases for any type)
13340정성태5/8/20234216오류 유형: 857. Microsoft.Data.SqlClient.SqlException - 0x80131904
13339정성태5/6/20235040닷넷: 2113. C# 12 - 기본 생성자(Primary Constructors)
13338정성태5/6/20234412닷넷: 2112. C# 12 - 기본 람다 매개 변수파일 다운로드1
1  2  3  4  5  6  7  8  9  10  [11]  12  13  14  15  ...