다음을 통해 공유


ClickOnce 배포의 보안, 버전 관리 및 매니페스트 문제

ClickOnce 배포 실패의 원인이 될 수 있는 ClickOnce 보안, 애플리케이션 버전 관리, 매니페스트 구문 및 의미 체계에 대한 다양한 문제가 있습니다.

ClickOnce 및 Windows 사용자 계정 컨트롤

Windows Vista 이상 버전의 Windows에서는 현재 사용자가 관리자 권한이 있는 계정으로 로그인되어 있더라도 기본적으로 표준 사용자로 애플리케이션이 실행됩니다. 애플리케이션은 관리자 권한이 필요한 작업을 수행해야 하는 경우 운영 체제에 알리고, 운영 체제는 관리자 자격 증명을 입력하라는 메시지를 사용자에게 표시합니다. UAC(사용자 계정 컨트롤)라는 이 기능을 사용하면 사용자의 명시적인 승인 없이는 애플리케이션이 전체 운영 체제에 영향을 줄 수 있는 변경 작업을 수행할 수 없습니다. Windows 애플리케이션은 애플리케이션 매니페스트의 trustInfo 섹션에서 requestedExecutionLevel 특성을 지정하여 이 권한 상승이 필요함을 선언합니다.

애플리케이션이 보안 권한 상승 공격에 노출될 위험 때문에 클라이언트에 UAC를 사용하도록 설정된 경우 ClickOnce 애플리케이션은 권한 상승을 요청할 수 없습니다. requestedExecutionLevel 속성을 requireAdministrator 또는 highestAvailable로 설정하기 위해 시도하는 모든 ClickOnce 애플리케이션은 Windows Vista 이상 버전에 설치되지 않습니다.

경우에 따라 Windows의 설치 관리자 검색 논리로 인해 ClickOnce 응용 프로그램이 관리자 권한으로 실행하려고 할 수 있습니다. 이 경우 애플리케이션 매니페스트의 requestedExecutionLevel 특성을 asInvoker로 설정할 수 있습니다. 이렇게 하면 애플리케이션 자체가 권한 상승 없이 실행됩니다. Visual Studio는 모든 애플리케이션 매니페스트에 이 특성을 자동으로 추가합니다.

애플리케이션의 전체 수명 동안 관리자 권한이 필요한 애플리케이션을 개발하는 경우에는 대신 Windows Installer(MSI) 기술을 사용하여 애플리케이션을 배포하는 것이 좋습니다. 자세한 내용은 Windows Installer 기본 사항을 참조하세요.

온라인 애플리케이션 할당량 및 부분 신뢰 애플리케이션

설치를 통하지 않고 온라인으로 실행되는 ClickOnce 애플리케이션은 온라인 애플리케이션에 따로 설정된 할당량 내에 맞아야 합니다. 또한 제한된 보안 권한 집합을 사용하는 경우와 같이 부분 신뢰로 실행되는 네트워크 애플리케이션은 할당량 크기의 절반보다 클 수 없습니다.

자세한 내용 및 온라인 애플리케이션 할당량 변경 방법에 대한 지침은 ClickOnce 캐시 개요를 참조하세요.

버전 관리 문제

어셈블리에 강력한 이름을 할당하고 애플리케이션 업데이트를 반영하여 어셈블리 버전 번호를 증가시키는 경우 문제가 발생할 수 있습니다. 강력한 이름의 어셈블리에 대한 참조를 사용하여 컴파일된 모든 어셈블리는 다시 컴파일되어야 하며, 그렇지 않으면 어셈블리가 이전 버전을 참조합니다. 어셈블리가 이를 시도하는 이유는 바인딩 요청에서 이전 버전 값을 사용하고 있기 때문입니다.

예를 들어 자체 프로젝트에 버전이 1.0.0.0인 강력한 이름의 어셈블리가 있다고 가정해 보세요. 어셈블리를 컴파일한 후 주 애플리케이션이 포함된 프로젝트에 대한 참조로 어셈블리를 추가합니다. 어셈블리를 업데이트하여 버전을 1.0.0.1로 올리고 애플리케이션을 다시 컴파일하지 않은 채 배포하려고 하면 애플리케이션이 런타임에 어셈블리를 로드할 수 없습니다.

이 오류는 ClickOnce 매니페스트를 수동으로 편집하는 경우에만 발생할 수 있으며, Visual Studio를 사용하여 배포를 생성하는 경우에는 이 오류가 발생하지 않습니다.

매니페스트에서 개별 .NET Framework 어셈블리 지정

이전 버전의 .NET Framework 어셈블리를 참조하도록 ClickOnce 배포를 수동으로 편집한 경우 애플리케이션이 로드되지 않습니다. 예를 들어 매니페스트에 지정된 버전보다 이전 버전의 .NET Framework의 System.Net 어셈블리에 대한 참조를 추가한 경우 오류가 발생합니다. 일반적으로 애플리케이션 매니페스트에서 애플리케이션 실행이 종속성으로 지정되는 기준이 되는 .NET Framework의 버전으로 개별 .NET Framework 어셈블리에 대한 참조를 지정하려고 시도하면 안 됩니다.

매니페스트 구문 분석 문제

ClickOnce에서 사용하는 매니페스트 파일은 XML 파일이며, 잘 구성되고 유효해야 합니다. 즉, XML 구문 규칙을 준수해야 하고, 관련 XML 스키마에 정의된 요소와 특성만 사용해야 합니다.

작은따옴표나 큰따옴표 같은 특수 문자가 포함된 애플리케이션 이름을 선택하면 매니페스트 파일에 문제가 발생할 수 있습니다. 애플리케이션 이름은 ClickOnce ID의 일부입니다. ClickOnce는 현재 특수 문자가 포함된 ID를 구문 분석하지 않습니다. 애플리케이션이 활성화되지 않으면 이름에 영문자와 숫자만 사용하고 있는지 확인하고 다시 배포해 보세요.

배포 또는 애플리케이션 매니페스트를 수동으로 편집한 경우 실수로 손상시켰을 수 있습니다. 매니페스트가 손상되면 ClickOnce 설치가 올바르게 진행되지 않습니다. ClickOnce 오류 대화 상자에서 세부 정보를 클릭하고 로그의 오류 메시지를 읽으면 런타임에 이러한 오류를 디버그할 수 있습니다. 다음 메시지 중 하나가 로그에 나열됩니다.

  • 구문 오류에 대한 설명과 오류가 발생한 줄 번호 및 문자 위치.

  • 매니페스트의 스키마를 위반하여 사용된 요소나 특성의 이름. 매니페스트에 XML을 수동으로 추가한 경우에는 추가 내용을 매니페스트 스키마와 비교해야 합니다. 자세한 내용은 ClickOnce 배포 매니페스트ClickOnce 애플리케이션 매니페스트를 참조하세요.

  • ID 충돌. 배포 및 애플리케이션 매니페스트의 종속성 참조는 name 특성과 publicKeyToken 특성에서 모두 고유해야 합니다. 매니페스트 내의 두 요소 사이에서 두 특성이 모두 일치하는 경우 매니페스트 구문 분석이 실패합니다.

매니페스트 또는 애플리케이션을 수동으로 변경하는 경우의 주의 사항

애플리케이션 매니페스트를 업데이트하는 경우 애플리케이션 매니페스트와 배포 매니페스트 모두에 다시 서명해야 합니다. 배포 매니페스트에는 해당 파일의 해시 및 디지털 서명이 포함된 애플리케이션 매니페스트에 대한 참조가 포함되어 있습니다.

배포 공급자 사용 시 주의 사항

ClickOnce 배포 매니페스트에는 애플리케이션을 설치하고 제공해야 하는 위치의 전체 경로를 가리키는 deploymentProvider 속성이 있습니다.

<deploymentProvider codebase="http://myserver/myapp.application" />

이 경로는 ClickOnce가 애플리케이션을 만들 때 설정되며, 설치된 애플리케이션의 경우 강제 적용됩니다. 이 경로는 ClickOnce 설치 프로그램이 애플리케이션을 설치하고 업데이트를 검색하는 표준 위치를 가리킵니다. xcopy 명령을 사용하여 ClickOnce 애플리케이션을 다른 위치에 복사하지만 deploymentProvider 속성을 변경하지 않는 경우 ClickOnce는 애플리케이션 다운로드를 시도할 때 여전히 원래 위치를 다시 참조합니다.

애플리케이션을 이동하거나 복사하려면 deploymentProvider 경로를 업데이트해야 클라이언트가 새 위치에서 설치됩니다. 애플리케이션을 설치한 경우에는 이 경로의 업데이트가 주로 문제가 됩니다. 항상 원래 URL을 통해 시작되는 온라인 애플리케이션의 경우 deploymentProvider 설정이 선택 사항입니다. deploymentProvider가 설정되면 이 설정이 적용됩니다. 그렇지 않으면 애플리케이션을 시작하는 데 사용되는 URL이 애플리케이션 파일을 다운로드하는 기준 URL로 사용됩니다.

참고 항목

매니페스트를 업데이트할 때마다 다시 서명해야 합니다.

ClickOnce 배포 문제 해결ClickOnce 애플리케이션 보안ClickOnce 배포 전략 선택