.NET Framework の初期化エラー:ユーザー エクスペリエンスの管理.NET Framework initialization errors: Managing the user experience

共通言語ランタイムの (CLR) のアクティベーション システムでは、マネージド アプリケーション コードの実行に使用する CLR のバージョンを特定します。The common language runtime (CLR) activation system determines the version of the CLR that will be used to run managed application code. アクティベーション システムで、読み込む CLR のバージョンを検出できない場合もあります。In some cases, the activation system might not be able to find a version of the CLR to load. 通常、この状況は、特定のコンピューターで無効になっているかインストールされていない CLR バージョンがアプリケーションで必要な場合に発生します。This situation typically occurs when an application requires a CLR version that is invalid or not installed on a given computer. 要求されたバージョンが見つからない場合、CLR アクティベーション システムは、呼び出された関数またはインターフェイスから HRESULT エラー コードを返します。また、アプリケーションを実行しているユーザーにはエラー メッセージが表示されることがあります。If the requested version is not found, the CLR activation system returns an HRESULT error code from the function or interface that was called, and may display an error message to the user who is running the application. ここでは、HRESULT コードの一覧を示し、エラー メッセージが表示されないようにする方法について説明します。This article provides a list of HRESULT codes and explains how you can prevent the error message from being displayed.

CLR には、「方法: CLR のアクティブ化に関する問題をデバッグする」で説明されているように、CLR のアクティベーションに関する問題のデバッグに役立つログ インフラストラクチャが用意されています。The CLR provides logging infrastructure to help you debug CLR activation issues, as described in How to: Debug CLR Activation Issues. このインフラストラクチャとアセンブリ バインド ログは完全に異なりますので混同しないでください。This infrastructure should not be confused with assembly binding logs, which are entirely different.

CLR アクティベーションの HRESULT コードCLR activation HRESULT codes

CLR アクティベーションの API は、ホストにアクティベーション操作の結果を報告する HRESULT コードを返します。The CLR activation APIs return HRESULT codes to report the result of an activation operation to a host. CLR ホストでは、追加操作を続行する前に、これらの戻り値を必ず調べる必要があります。CLR hosts should always consult these return values before proceeding with additional operations.

  • CLR_E_SHIM_RUNTIMELOADCLR_E_SHIM_RUNTIMELOAD

  • CLR_E_SHIM_RUNTIMEEXPORTCLR_E_SHIM_RUNTIMEEXPORT

  • CLR_E_SHIM_INSTALLROOTCLR_E_SHIM_INSTALLROOT

  • CLR_E_SHIM_INSTALLCOMPCLR_E_SHIM_INSTALLCOMP

  • CLR_E_SHIM_LEGACYRUNTIMEALREADYBOUNDCLR_E_SHIM_LEGACYRUNTIMEALREADYBOUND

  • CLR_E_SHIM_SHUTDOWNINPROGRESSCLR_E_SHIM_SHUTDOWNINPROGRESS

初期化エラーの UIUI for initialization errors

CLR アクティベーション システムがアプリケーションで必要なランタイムの正しいバージョンを読み込むことができない場合、ユーザーには、コンピューターがアプリケーションを実行するように正しく構成されていないことを示すエラー メッセージが表示され、この状況を解決できるようになります。If the CLR activation system cannot load the correct version of the runtime that is required by an application, it displays an error message to users to inform them that their computer is not properly configured to run the application, and provides them with an opportunity to remedy the situation. この状況では、通常、次のエラー メッセージが表示されます。The following error message is typically presented in this situation. ユーザーは [はい] を選択すると、アプリケーションに適切な .NET Framework のバージョンをダウンロードできる Microsoft Web サイトに移動します。The user can choose Yes to go to a Microsoft website where they can download the correct .NET Framework version for the application.

.NET Framework 初期化エラー ダイアログ ボックス.NET Framework Initialization Error dialog box

初期化エラーの解決Resolving the initialization error

開発者には、.NET Framework の初期化エラー メッセージを制御するさまざまなオプションが用意されています。As a developer, you have a variety of options for controlling the .NET Framework initialization error message. たとえば、次のセクションで説明されているように、API フラグを使用してメッセージが表示されないようにすることができます。For example, you can use an API flag to prevent the message from being displayed, as discussed in the next section. ただし、要求されたランタイムがアプリケーションで読み込まれなかった問題を解決する必要があります。However, you still have to resolve the issue that prevented your application from loading the requested runtime. そうしないと、アプリケーションがまったく実行されないか、一部の機能を利用できない可能性があります。Otherwise, your application may not run at all, or some functionality may not be available.

基になる問題を解決し、最適なユーザー エクスペリエンスを提供する (エラー メッセージの数を減らす) には、次のことをお勧めします。To resolve the underlying issues and provide the best user experience (fewer error messages), we recommend the following:

  • .NET Framework 3.5 (以前) のアプリケーションの場合:.NET Framework 4 以降のバージョンをサポートするようにアプリケーションを構成します (手順はこちらでご覧ください)。For .NET Framework 3.5 (and earlier) applications: Configure your application to support the .NET Framework 4 or later versions (see instructions).

  • .NET Framework 4 アプリケーションの場合:アプリケーションのセットアップの一環として .NET Framework 4 再頒布可能パッケージをインストールします。For .NET Framework 4 applications: Install the .NET Framework 4 redistributable package as part of your application setup. 配置ガイド (開発者向け)」をご覧ください。See Deployment Guide for Developers.

エラー メッセージの制御Controlling the error message

要求された .NET Framework のバージョンが見つからなかったことを伝えるエラー メッセージを表示することは、ユーザーにとって役立つサービスであると見なされることもあれば、少し不快であると見なされることもあります。Displaying an error message to communicate that a requested .NET Framework version was not found can be viewed as either a helpful service or a minor annoyance to users. いずれの場合も、アクティベーションの API にフラグを渡すことによってこの UI を制御できます。In either case, you can control this UI by passing flags to the activation APIs.

ICLRMetaHostPolicy::GetRequestedRuntime メソッドは、入力として METAHOST_POLICY_FLAGS 列挙型のメンバーを受け取ります。The ICLRMetaHostPolicy::GetRequestedRuntime method accepts a METAHOST_POLICY_FLAGS enumeration member as input. METAHOST_POLICY_SHOW_ERROR_DIALOG フラグを含めると、CLR の要求されたバージョンが見つからない場合にエラー メッセージを要求することができます。You can include the METAHOST_POLICY_SHOW_ERROR_DIALOG flag to request an error message if the requested version of the CLR is not found. 既定では、エラー メッセージは表示されませんBy default, the error message is not displayed. (ICLRMetaHost::GetRuntime メソッドは、このフラグを受け取らず、エラー メッセージを表示する他の方法を提供しません)。(The ICLRMetaHost::GetRuntime method does not accept this flag, and does not provide any other way to display the error message.)

Windows には、プロセス内で実行するコードの結果としてエラー メッセージを表示するかどうかを宣言する際に使用できる SetErrorMode 関数が用意されています。Windows provides a SetErrorMode function that you can use to declare whether you want error messages to be shown as a result of code that runs within your process. SEM_FAILCRITICALERRORS フラグを指定すると、エラー メッセージが表示されないようにすることができます。You can specify the SEM_FAILCRITICALERRORS flag to prevent the error message from being displayed.

ただし、一部のシナリオでは、アプリケーション プロセスで設定された SEM_FAILCRITICALERRORS の設定をオーバーライドすることが重要です。However, in some scenarios, it is important to override the SEM_FAILCRITICALERRORS setting set by an application process. たとえば、CLR をホストし、SEM_FAILCRITICALERRORS が設定されているプロセスでホストされるネイティブの COM コンポーネントがある場合、その特定のアプリケーション プロセス内でエラー メッセージを表示する影響に応じて、フラグをオーバーライドできます。For example, if you have a native COM component that hosts the CLR and that is hosted in a process where SEM_FAILCRITICALERRORS is set, you may want to override the flag, depending on the impact of displaying error messages within that particular application process. この場合、次のいずれかのフラグを使用して、SEM_FAILCRITICALERRORS をオーバーライドできます。In this case, you can use one of the following flags to override SEM_FAILCRITICALERRORS:

CLR によって提供されているホストの UI ポリシーUI policy for CLR-provided hosts

CLR にはさまざまなシナリオ向けの一連のホストが含まれています。それらすべてのホストでは、必要なバージョンのランタイムを読み込むときに問題が発生した場合にエラー メッセージを表示します。The CLR includes a set of hosts for a variety of scenarios, and these hosts all display an error message when they encounter problems loading the required version of the runtime. 次の表に、ホストとそのエラー メッセージ ポリシーの一覧を示します。The following table provides a list of hosts and their error message policies.

CLR ホストCLR host 説明Description エラー メッセージ ポリシーError message policy エラー メッセージを無効にできるかCan error message be disabled?
マネージド EXE ホストManaged EXE host マネージド EXE を起動します。Launches managed EXEs. .NET Framework のバージョンが見つからない場合に表示されるIs shown in case of a missing .NET Framework version いいえNo
マネージド COM ホストManaged COM host マネージド COM コンポーネントをプロセスに読み込みます。Loads managed COM components into a process. .NET Framework のバージョンが見つからない場合に表示されるIs shown in case of a missing .NET Framework version はい (SEM_FAILCRITICALERRORS フラグを設定すると可能)Yes, by setting the SEM_FAILCRITICALERRORS flag
ClickOnce ホストClickOnce host ClickOnce アプリケーションを起動します。Launches ClickOnce applications. .NET Framework 4.5 以降で、.NET Framework のバージョンが見つからない場合に表示されるIs shown in case of a missing .NET Framework version, starting with the .NET Framework 4.5 いいえNo
XBAP ホストXBAP host WPF XBAP アプリケーションを起動します。Launches WPF XBAP applications. .NET Framework 4.5 以降で、.NET Framework のバージョンが見つからない場合に表示されるIs shown in case of a missing .NET Framework version, starting with the .NET Framework 4.5 いいえNo

Windows 8 の動作と UIWindows 8 behavior and UI

CLR アクティベーション システムでは、他のバージョンの Windows オペレーティング システムで提供しているのと同じ動作と UI を Windows 8 でも提供しています。ただし、CLR 2.0 を読み込む際に問題が発生する場合は除きます。The CLR activation system provides the same behavior and UI on Windows 8 as it does on other versions of the Windows operating system, except when it encounters issues loading CLR 2.0. Windows 8 には、CLR 4.5 を使用する .NET Framework 4.5 が含まれています。Windows 8 includes the .NET Framework 4.5, which uses CLR 4.5. ただし、Windows 8 には CLR 2.0 を使用する .NET Framework 2.0、3.0、3.5 のいずれも含まれていません。However, Windows 8 does not include the .NET Framework 2.0, 3.0, or 3.5, which all use CLR 2.0. その結果、既定では、CLR 2.0 に依存するアプリケーションを Windows 8 上で実行することはできません。As a result, applications that depend on CLR 2.0 do not run on Windows 8 by default. 代わりに、ユーザーが .NET Framework 3.5 をインストールできるように、次のダイアログ ボックスが表示されます。Instead, they display the following dialog box to enable users to install the .NET Framework 3.5. ユーザーは、コントロール パネルで .NET Framework 3.5 を有効にすることもできます。Users can also enable the .NET Framework 3.5 in Control Panel. 両方のオプションの説明については、「Windows 10、Windows 8.1、および Windows 8 への .NET Framework 3.5 のインストール」を参照してください。Both options are discussed in the article Install the .NET Framework 3.5 on Windows 10, Windows 8.1, and Windows 8.

Windows 8 に 3.5 をインストールするためのダイアログ ボックスDialog box for 3.5 install on Windows 8

注意

.NET Framework 4.5 によって、ユーザーのコンピューターの .NET Framework 4 (CLR 4) が置き換えられます。The .NET Framework 4.5 replaces the .NET Framework 4 (CLR 4) on the user's computer. したがって、Windows 8 上では、.NET Framework 4 アプリケーションはこのダイアログ ボックスを表示せずにシームレスに実行されます。Therefore, .NET Framework 4 applications run seamlessly, without displaying this dialog box, on Windows 8.

.NET Framework 3.5 がインストールされている場合、ユーザーは Windows 8 コンピューター上で .NET Framework 2.0、3.0、または 3.5 に依存するアプリケーションを実行できます。When the .NET Framework 3.5 is installed, users can run applications that depend on the .NET Framework 2.0, 3.0, or 3.5 on their Windows 8 computers. また、アプリケーションが .NET Framework 1.0 または 1.1 でのみ実行するように明示的に構成されていなければ、.NET Framework 1.0 および 1.1 のアプリケーションを実行することもできます。They can also run .NET Framework 1.0 and 1.1 applications, provided that those applications are not explicitly configured to run only on the .NET Framework 1.0 or 1.1. .NET Framework 1.1 からの移行」をご覧ください。See Migrating from the .NET Framework 1.1.

.NET Framework 4.5 以降では、CLR アクティベーション ログは、初期化エラー メッセージが表示された日時とその理由を記録するログ エントリを含むように強化されています。Starting with the .NET Framework 4.5, CLR activation logging has been improved to include log entries that record when and why the initialization error message is displayed. 詳細については、CLR のアクティブ化に関する問題をデバッグする」で説明されているように、CLR のアクティベーションに関する問題のデバッグに役立つログ インフラストラクチャが用意されています。For more information, see How to: Debug CLR Activation Issues.

関連項目See also