비고
이 문서는 .NET Framework에만 적용됩니다. .NET 6 이상 버전을 포함하여 .NET의 최신 구현에는 적용되지 않습니다.
CLR(공용 언어 런타임) 활성화 시스템은 관리되는 애플리케이션 코드를 실행하는 데 사용할 CLR 버전을 결정합니다. 경우에 따라 정품 인증 시스템에서 로드할 CLR 버전을 찾지 못할 수 있습니다. 이 상황은 일반적으로 애플리케이션에 잘못된 CLR 버전이 필요하거나 지정된 컴퓨터에 설치되지 않은 경우에 발생합니다. 요청된 버전을 찾을 수 없는 경우 CLR 활성화 시스템은 호출된 함수 또는 인터페이스에서 HRESULT 오류 코드를 반환하고 애플리케이션을 실행하는 사용자에게 오류 메시지를 표시할 수 있습니다. 이 문서에서는 HRESULT 코드 목록을 제공하고 오류 메시지가 표시되지 않도록 방지하는 방법을 설명합니다.
CLR은 방법: CLR 활성화 문제 디버그에 설명된 대로 CLR 활성화 문제를 디버그하는 데 도움이 되는 로깅 인프라를 제공합니다. 이 인프라는 완전히 다른 어셈블리 바인딩 로그와 혼동해서는 안 됩니다.
CLR 활성화 HRESULT 코드
CLR 활성화 API는 HRESULT 코드를 반환하여 활성화 작업의 결과를 호스트에 보고합니다. CLR 호스트는 추가 작업을 계속하기 전에 항상 이러한 반환 값을 참조해야 합니다.
CLR_E_SHIM_RUNTIMELOAD
CLR_E_SHIM_RUNTIMEEXPORT
CLR_E_SHIM_INSTALLROOT
CLR_E_SHIM_INSTALLCOMP
CLR_E_SHIM_LEGACYRUNTIMEALREADYBOUND (레거시 런타임이 이미 연결됨)
CLR_E_SHIM_SHUTDOWNINPROGRESS (CLR 셧다운 진행 중)
초기화 오류에 대한 UI
CLR 활성화 시스템에서 애플리케이션에 필요한 올바른 버전의 런타임을 로드할 수 없는 경우 사용자에게 오류 메시지를 표시하여 컴퓨터가 애플리케이션을 실행하도록 제대로 구성되지 않았다는 것을 알리고 상황을 해결할 수 있는 기회를 제공합니다. 이 상황에서는 일반적으로 다음과 같은 오류 메시지가 표시됩니다. 사용자는 예를 선택하여 애플리케이션에 대한 올바른 .NET Framework 버전을 다운로드할 수 있는 Microsoft 웹 사이트로 이동합니다.
초기화 오류 해결
개발자는 .NET Framework 초기화 오류 메시지를 제어하기 위한 다양한 옵션이 있습니다. 예를 들어 다음 섹션에서 설명한 대로 API 플래그를 사용하여 메시지가 표시되지 않도록 할 수 있습니다. 그러나 애플리케이션이 요청된 런타임을 로드하지 못하게 하는 문제를 여전히 해결해야 합니다. 그렇지 않으면 애플리케이션이 전혀 실행되지 않거나 일부 기능을 사용할 수 없을 수 있습니다.
기본 문제를 해결하고 최상의 사용자 환경(적은 오류 메시지)을 제공하려면 다음을 권장합니다.
.NET Framework 3.5 이하 애플리케이션의 경우: .NET Framework 4 이상 버전을 지원하도록 애플리케이션을 구성 합니다(지침 참조).
.NET Framework 4 애플리케이션의 경우: 애플리케이션 설정의 일부로 .NET Framework 4 재배포 가능 패키지를 설치합니다. 개발자를 위한 배포 가이드를 참조하세요.
오류 메시지 제어
요청된 .NET Framework 버전을 찾을 수 없음을 알리는 오류 메시지를 표시하는 것은 사용자에게 유용한 서비스 또는 사소한 성가신 서비스로 볼 수 있습니다. 두 경우 모두 활성화 API에 플래그를 전달하여 이 UI를 제어할 수 있습니다.
ICLRMetaHostPolicy::GetRequestedRuntime 메서드는 METAHOST_POLICY_FLAGS 열거형 멤버를 입력으로 허용합니다. 요청된 CLR 버전을 찾을 수 없는 경우 오류 메시지를 요청하는 METAHOST_POLICY_SHOW_ERROR_DIALOG 플래그를 포함할 수 있습니다. 기본적으로 오류 메시지는 표시되지 않습니다. ( ICLRMetaHost::GetRuntime 메서드는 이 플래그를 허용하지 않으며 오류 메시지를 표시하는 다른 방법을 제공하지 않습니다.)
Windows는 프로세스 내에서 실행되는 코드의 결과로 오류 메시지를 표시할지 여부를 선언하는 데 사용할 수 있는 SetErrorMode 함수를 제공합니다. 오류 메시지가 표시되지 않도록 SEM_FAILCRITICALERRORS 플래그를 지정할 수 있습니다.
그러나 일부 시나리오에서는 애플리케이션 프로세스에서 설정한 SEM_FAILCRITICALERRORS 설정을 재정의하는 것이 중요합니다. 예를 들어, CLR을 호스트하는 네이티브 COM 구성 요소가 SEM_FAILCRITICALERRORS가 설정된 프로세스에서 호스트되는 경우, 특정 애플리케이션 프로세스 내에서 오류 메시지를 표시할 때의 영향에 따라 플래그를 재정의할 필요가 있을 수 있습니다. 이 경우, SEM_FAILCRITICALERRORS를 재정의하기 위해 다음 플래그 중 하나를 사용할 수 있습니다.
ICLRMetaHostPolicy::GetRequestedRuntime 메서드와 함께 METAHOST_POLICY_IGNORE_ERROR_MODE 사용합니다.
GetRequestedRuntimeInfo 함수와 함께 RUNTIME_INFO_IGNORE_ERROR_MODE 사용합니다.
CLR 제공 호스트에 대한 UI 정책
CLR에는 다양한 시나리오에 대한 호스트 집합이 포함되어 있으며, 이러한 호스트는 필요한 버전의 런타임을 로드하는 데 문제가 발생하면 모두 오류 메시지를 표시합니다. 다음 표에서는 호스트 목록과 해당 오류 메시지 정책을 제공합니다.
CLR 호스트 | 설명 | 오류 메시지 정책 | 오류 메시지를 사용하지 않도록 설정할 수 있나요? |
---|---|---|---|
관리되는 EXE 호스트 | 관리되는 EXE를 시작합니다. | .NET Framework 버전이 누락된 경우 표시됨 | 아니오 |
관리되는 COM 호스트 | 관리되는 COM 구성 요소를 프로세스에 로드합니다. | .NET Framework 버전이 누락된 경우 표시됨 | 예, SEM_FAILCRITICALERRORS 플래그를 설정하여 |
ClickOnce 호스트 | ClickOnce 애플리케이션을 시작합니다. | .NET Framework 4.5부터 .NET Framework 버전이 누락된 경우 표시됩니다. | 아니오 |
XBAP 호스트 | WPF XBAP 애플리케이션을 시작합니다. | .NET Framework 4.5부터 .NET Framework 버전이 누락된 경우 표시됩니다. | 아니오 |
Windows 8 동작 및 UI
CLR 정품 인증 시스템은 CLR 2.0 로드 문제가 발생하는 경우를 제외하고 Windows 8에서 다른 버전의 Windows 운영 체제에서와 동일한 동작 및 UI를 제공합니다. Windows 8에는 CLR 4.5를 사용하는 .NET Framework 4.5가 포함되어 있습니다. 그러나 Windows 8에는 CLR 2.0을 사용하는 .NET Framework 2.0, 3.0 또는 3.5가 포함되지 않습니다. 따라서 CLR 2.0에 의존하는 애플리케이션은 기본적으로 Windows 8에서 실행되지 않습니다. 대신 사용자가 .NET Framework 3.5를 설치할 수 있도록 다음 대화 상자를 표시합니다. 사용자는 제어판에서 .NET Framework 3.5를 사용하도록 설정할 수도 있습니다. 두 옵션 모두 Windows 11, Windows 10, Windows 8.1 및 Windows 8에 .NET Framework 3.5 설치 문서에서 설명합니다.
비고
.NET Framework 4.5는 사용자 컴퓨터의 .NET Framework 4(CLR 4)를 대체합니다. 따라서 .NET Framework 4 애플리케이션은 Windows 8에서 이 대화 상자를 표시하지 않고 원활하게 실행됩니다.
.NET Framework 3.5가 설치되면 사용자는 Windows 8 컴퓨터에서 .NET Framework 2.0, 3.0 또는 3.5에 의존하는 애플리케이션을 실행할 수 있습니다. .NET Framework 1.0 또는 1.1에서만 실행되도록 명시적으로 구성되지 않은 경우 .NET Framework 1.0 및 1.1 애플리케이션을 실행할 수도 있습니다. .NET Framework 1.1에서 마이그레이션을 참조하세요.
.NET Framework 4.5부터 초기화 오류 메시지가 표시되는 시기와 이유를 기록하는 로그 항목을 포함하도록 CLR 활성화 로깅이 개선되었습니다. 자세한 내용은 방법: CLR 활성화 문제 디버그를 참조하세요.
참고하십시오
.NET