次の方法で共有


.NET Framework 初期化エラー: ユーザー エクスペリエンスの管理

この記事は .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

初期化エラー用のUI

CLR アクティブ化システムは、アプリケーションで必要なランタイムの正しいバージョンを読み込むことができない場合、ユーザーに対して、アプリケーションを実行するようにコンピューターが適切に構成されていないことを通知するエラー メッセージを表示し、状況を解決する機会を提供します。 この状況では、通常、次のエラー メッセージが表示されます。 ユーザーは [ はい ] を選択して Microsoft Web サイトにアクセスし、アプリケーションの正しい .NET Framework バージョンをダウンロードできます。

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

初期化エラーの解決

開発者は、.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列挙メンバーを入力として受け入れます。 METAHOST_POLICY_SHOW_ERROR_DIALOG フラグを含め、要求されたバージョンの CLR が見つからない場合にエラー メッセージを要求できます。 既定では、エラー メッセージは表示されません。 ( ICLRMetaHost::GetRuntime メソッドは、このフラグを受け入れず、エラー メッセージを表示する他の方法を提供しません)。

Windows には、プロセス内で実行されるコードの結果としてエラー メッセージを表示するかどうかを宣言するために使用できる SetErrorMode 関数が用意されています。 エラー メッセージが表示されないように、SEM_FAILCRITICALERRORS フラグを指定できます。

ただし、一部のシナリオでは、アプリケーション プロセスによって設定されたSEM_FAILCRITICALERRORS設定をオーバーライドすることが重要です。 たとえば、CLR をホストし、SEM_FAILCRITICALERRORSが設定されているプロセスでホストされるネイティブ COM コンポーネントがある場合は、その特定のアプリケーション プロセス内でエラー メッセージを表示する影響に応じて、フラグをオーバーライドできます。 この場合、次のいずれかのフラグを使用して、SEM_FAILCRITICALERRORSをオーバーライドできます。

CLR が提供するホストの UI ポリシー

CLR にはさまざまなシナリオに対応する一連のホストが含まれており、これらのホストはすべて、必要なバージョンのランタイムの読み込みに関する問題が発生したときにエラー メッセージを表示します。 次の表に、ホストとそのエラー メッセージ ポリシーの一覧を示します。

CLR ホスト 説明 エラー メッセージ ポリシー エラー メッセージを無効にできますか?
マネージド EXE ホスト マネージド EXEs を起動します。 .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 には .NET Framework 2.0、3.0、または 3.5 は含まれず、すべて CLR 2.0 を使用します。 その結果、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 をインストールする」の記事で説明されています。

Windows 8 に 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 アクティブ化の問題をデバッグする」を参照してください。

こちらも参照ください