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]

... 151  152  153  154  155  156  157  [158]  159  160  161  162  163  164  165  ...
NoWriterDateCnt.TitleFile(s)
1096정성태8/15/201125658디버깅 기술: 42. Watson Bucket 정보를 이용한 CLR 응용 프로그램 예외 분석 - (2)
1095정성태8/14/201126103디버깅 기술: 41. Windbg - 비정상 종료된 닷넷 프로그램의 StackTrace에서 보이는 offset 값 의미
1094정성태8/14/201130464오류 유형: 131. Fiddler가 강제 종료된 경우, 웹 사이트 방문이 안되는 현상
1093정성태7/27/201124094오류 유형: 130. Unable to connect to the Microsoft Visual Studio Remote Debugging Monitor ... Access is denied.
1092정성태7/22/201126471Team Foundation Server: 46. 코드 이외의 파일에 대해 소스 제어에서 제외시키는 방법
1091정성태7/21/201125473개발 환경 구성: 128. WP7 Emulator 실행 시 audiodg.exe의 CPU 소모율 증가 [2]
1089정성태7/18/201131051.NET Framework: 234. 왜? Button 컨트롤에는 MouseDown/MouseUp 이벤트가 발생하지 않을까요?파일 다운로드1
1088정성태7/16/201124198.NET Framework: 233. Entity Framework 4.1 - 윈도우 폰 7에서의 CodeFirst 순환 참조 문제파일 다운로드1
1087정성태7/15/201126818.NET Framework: 232. Entity Framework 4.1 - CodeFirst 개체의 직렬화 시 순환 참조 해결하는 방법 - 두 번째 이야기파일 다운로드1
1086정성태7/14/201128282.NET Framework: 231. Entity Framework 4.1 - CodeFirst 개체의 직렬화 시 순환 참조 해결하는 방법 [1]파일 다운로드1
1085정성태7/14/201128696.NET Framework: 230. Entity Framework 4.1 - Code First + WCF 서비스 시 EndpointNotFoundException 오류 - 두 번째 이야기파일 다운로드1
1084정성태7/11/201134006.NET Framework: 229. SQL 서버 - DB 테이블의 데이터 변경에 대한 알림 처리 [4]파일 다운로드1
1083정성태7/11/201128063.NET Framework: 228. Entity Framework 4.1 - Code First + WCF 서비스 시 EndpointNotFoundException 오류
1082정성태7/10/201127624.NET Framework: 227. basicHttpBinding + 사용자 정의 인증 구현 [2]파일 다운로드1
1081정성태7/9/201126943VC++: 53. Windows 7에서 gcc.exe 실행 시 Access denied 오류 [2]
1080정성태7/8/201125424웹: 23. Sysnet 웹 사이트의 HTML5 변환 기록 - 두 번째 이야기파일 다운로드1
1079정성태7/6/201129875오류 유형: 129. Hyper-V + Realtek 랜카드가 설치된 시스템의 BSOD 현상 [2]
1078정성태7/5/201137434VC++: 52. Chromium 컴파일하는 방법 [2]
1077정성태6/24/201135053.NET Framework: 226. HttpWebRequest 타입의 HaveResponse 속성 이야기파일 다운로드1
1076정성태6/23/201129185오류 유형: 128. SQL Express - User Instance 옵션을 사용한 경우 발생하는 오류 메시지 유형 2가지
1075정성태6/21/201124802VS.NET IDE: 69. 윈폰 프로젝트에서 WCF 서비스 참조할 때 Reference.cs 파일이 비어있는 경우
1074정성태6/20/201124874.NET Framework: 225. 닷넷 네트워크 라이브러리의 트레이스 기능파일 다운로드1
1073정성태6/20/201127103오류 유형: 127. Visual Studio에서 WCF 서비스의 이름 변경 시 발생할 수 있는 오류
1072정성태6/19/201126570.NET Framework: 224. EF 4.1 Code First에서 Identity 칼럼 생성하는 방법파일 다운로드1
1071정성태6/19/201130088.NET Framework: 223. Entity Framework 4.1의 Code First를 이용한 SQL Azure 데이터베이스 생성 [3]파일 다운로드1
1070정성태6/19/201127607.NET Framework: 222. Windows Azure - VM Role 베타 프로그램 참여 [2]
... 151  152  153  154  155  156  157  [158]  159  160  161  162  163  164  165  ...