WebView2 アプリと WebView2 ランタイムの配布

WebView2 アプリは、クライアント コンピューター上の WebView2 ランタイムに依存します。 WebView2 アプリを配布する場合は、WebView2 ランタイムがクライアント コンピューターに配布および更新される方法を考慮する必要があります。

ランタイム、Evergreen 配布、および固定バージョンの配布の概要

WebView2 ランタイム

WebView2 ランタイムは再頒布可能なランタイムであり、WebView2 アプリの基になる (またはバ ッキング) Web プラットフォームとして機能します。 概念は、Visual C++ または C++/.NET アプリ用の .NET ランタイムに似ています。 WebView2 ランタイムには、WebView2 アプリMicrosoft Edgeテストされた変更されたバイナリが含まれている。 WebView2 ランタイムがインストールされた後、ユーザーに表示されるブラウザー アプリとして表示されません。 たとえば、ユーザーにブラウザー のデスクトップ ショートカットや [スタート] メニューのエントリが 表示 されません。

WebView2 ランタイムをクライアント コンピューターに配布および更新するには、Evergreen 配布モードと固定バージョン配布モードの 2 つの異なる方法があります。

Evergreen ランタイム配布モード

_Evergreen_配布モードでは、WebView2 ランタイムはアプリにパッケージ化されませんが、最初はオンライン ブートストラップまたはオフライン インストーラーを使用してクライアントにインストールされます。 その後、WebView2 ランタイムはクライアント コンピューターで自動的に更新されます。 その後、最新の WebView2 API を使用する WebView2 アプリの更新プログラムを、最新の WebView2 SDK から配布できます。 ほとんどの開発者には、エバーグリーンの配布モードをお勧めします。

Pros:

  • 基になる Web プラットフォーム (WebView2 ランタイム) は、ユーザーからの労力を必要とせずに自動的に更新されます。
  • WebView2 ランタイムは、クライアント上のすべての WebView2 アプリで共有されるので、クライアント システム上の WebView2 ランタイムに必要なディスク領域が少なくなっています。
  • 適格なシステムでは、Microsoft Edge と Evergreen WebView2 ランタイムのバイナリは、同じバージョンの場合に一緒にハードリンクされます。 このリンクは、ディスクフットプリント、メモリ、およびパフォーマンスの利点を提供します。

短所:

  • WebView2 アプリでは、WebView2 ランタイムの特定のバージョンが必要と指定することはできません。

固定バージョンのランタイム配布モード

固定バージョン 配布モードでは 、WebView2 ランタイムの特定のバージョンをダウンロードし、それをアプリ パッケージ内の WebView2 アプリと一緒にパッケージ化します。 アプリでパッケージ化する WebView2 ランタイムは、クライアントのコンピューター上の他のアプリではなく、WebView2 アプリによってのみ使用されます。

Pros:

  • WebView2 ランタイムのバージョン管理を詳細に制御できます。 アプリで使用できる WebView2 ランタイムのバージョンを制御するために、アプリで使用できる WebView2 API を確認できます。 アプリは、最新の API が存在するかどうかをテストする必要があります。

短所:

  • WebView2 ランタイムを自分で管理する必要があります。 WebView2 ランタイムはクライアントで自動的に更新されるのではないので、最新の WebView2 API を使用するには、更新された WebView2 ランタイムと共にアプリを定期的に更新する必要があります。
  • 複数の WebView2 アプリがインストールされている場合は、クライアントに必要なディスク領域が多く必要です。
  • 固定バージョン ランタイムは、インストーラーを使用してインストールすることはできません。

[ランタイムのダウンロード] ページのオプションについて

[WebView2 ページの WebView2 ランタイムのダウンロード] セクションMicrosoft Edge WebView2 ランタイムをクライアント コンピューターに配布するためのいくつかのオプションが提供されています。 **** このページのオプションを理解すると、使用する方法を決定するのに役立つ優れた概要が提供されます。

WebView2 ランタイムを配布および更新するためのオプション

  • ページ の [Evergreen Bootstrapper] セクションには、オンライン ユーザー向けクライアント コンピューター上で実行される小さな Evergreen ランタイム ブートストラップが表示されます。 ブートストラップは、適切な WebView2 Evergreen ランタイムをクライアントにダウンロードしてインストールします。 ブートストラップは、次に示すいくつかの方法で使用できます。

    • [リンクの取得] ボタンから取得したリンクを使用して、ブートストラップ にリンク します。 アプリでは、このリンクを使用して、ブートストラップをプログラムによってクライアントにダウンロードし、ブートストラップを呼び出します。 この方法では、ブートストラップをアプリにパッケージ化する必要が回避されます。 この方法では、ブートストラップを取得するために、Microsoft のContent Delivery Network (CDN) に依存します。

    • ブートストラップをダウンロードし ([ブートストラップ] セクション**** の [ダウンロード] ボタンを使用して)、ブートストラップをアプリと一緒に配布します。 この方法では、ブートストラップをアプリ インストーラー/アップデータ、またはアプリ自体でパッケージ化し、アプリに含まれているブートストラップを呼び出します。 この方法では、ブートストラップを取得するために、Microsoft のCDN依存を回避します。

  • ページ の [Evergreen スタンドアロン インストーラー ] セクションには、主にオフライン ユーザー向け、大規模なスタンドアロンの Evergreen インストーラーが表示されます。 この方法では、スタンドアロン インストーラーをアプリ インストーラー/アップデータまたはアプリ自体でパッケージ化し、Evergreen スタンドアロン インストーラーを呼び出します。 この方法では、ランタイムを取得するために、Microsoft CDNの依存関係を回避します。

  • ページ の [固定バージョン ] セクションには、アプリと共に配布する WebView2 ランタイムの特定のバージョンである固定バージョン ランタイムが表示されます。

ほとんどのアプリでは、Evergreen 配布モードをお勧めします。

WebView2 ランタイムの詳細

WebView2 アプリを配布する場合は、WebView2 ランタイムがクライアント コンピューター上に存在する必要があります。 この要件は、Evergreen と Fixed Version の両方の配布モードに適用されます。

固定バージョン配布モードを使用する場合は、次の 2 つのセクションをスキップし、[固定バージョンのランタイム配布モードの詳細] に移動します

開発中または実稼働中のランタイムまたはブラウザーのサポート

開発およびテスト中に、WebView2 アプリは、バッキング Web プラットフォームとしていずれかのオプションを使用できます。

  • WebView2 ランタイム。 ランタイムは、通常、Web プラットフォームの機能と更新の呼び出しを、ブラウザーの Stable チャネルと同Microsoft Edgeします。 実稼働環境で WebView2 ランタイムを使用するか、ユーザーが現在使用している Web プラットフォームに対して開発およびテストを行います。
  • ブラウザー チャネルのプレビュー (Insider) Microsoft Edge表示します。 これらのMicrosoft Edgeプレビュー チャネルは Beta、Dev、および Canary です。 この方法を使用して、アプリの前方互換性をテストし、アプリの更新が必要な大きな変更が加わるかどうかが分かっています。 詳細については、「プレビュー チャネルに 切り替える」に移動して、今後の API と機能をテストします

WebView2 アプリの実稼働リリースでは、WebView2 ランタイムをバッキング Web プラットフォームとしてのみ使用Microsoft Edge。

Microsoft Edge安定したチャネルは WebView2 ではサポートされていません

WebView2 アプリでは、バッキング Web プラットフォームとしてアプリの Stable チャネルMicrosoft Edge使用することはできません。 この制限により、WebView2 アプリの実稼働リリースでブラウザーへの依存関係が取り込まれるのを防ぐことが可能です。 WebView2 アプリは、次の理由により、実稼働中にブラウザーに依存することはできません。

  • Microsoft Edgeユーザー デバイスに存在する保証はありません。 企業や教育の多くのデバイスは、更新プログラムWindows、または Microsoft によって直接管理されません。 このようなデバイスがインストールされていないMicrosoft Edgeがあります。 WebView2 アプリの実稼働バージョンで WebView2 ランタイムを使用する必要が生じ、Microsoft Edge WebView2 アプリを実行するMicrosoft Edgeを回避できます。

  • ブラウザーとアプリの使用例は異なります。 WebView2 アプリでクライアントに Microsoft Edgeが必要な場合、WebView2 アプリに意図しない副作用が発生する可能性があります。 たとえば、IT 管理者は、ブラウザーが特定のバージョンから更新されるのを防ぎ、ブラウザーと内部 Web サイトとの互換性を維持できます。 ブラウザーではなく WebView2 ランタイムを使用する WebView2 アプリの実稼働バージョンを要求すると、ブラウザーの更新がクライアントの管理者によって防止された場合でも、WebView2 アプリは常に常に更新されます。

  • ブラウザーとは対照的に、WebView2 ランタイムはアプリのシナリオ用に開発およびテストされ、WebView2 ランタイムには、ブラウザーでまだ使用できないバグ修正が含まれる場合があります。

Evergreen WebView2 ランタイムは、11 オペレーティング システムのWindows含まれます。 さまざまな WebView2 アプリが、11 より前のオペレーティング システムを持つデバイスに Evergreen ランタイムWindowsされています。 ただし、一部のデバイスではランタイムが事前にインストールされていない可能性があります。そのため、ランタイムがクライアントに存在するかどうかを確認してください。

アプリが WebView2 を作成する前に、アプリは WebView2 ランタイムが存在するかどうかを確認し (レジストリ キーを確認するか、API を呼び出して)、見つからない場合はランタイムをインストールする必要があります。 アプリは、アプリをインストールまたは更新する場合 (推奨)、またはアプリの実行時にこのチェックを実行できます。 ランタイムが存在するかどうかを確認するには、以下の [Evergreen WebView2 ランタイムの展開] に移動します。

Evergreen ランタイム配布モードの詳細

Evergreen 配布モードでは、WebView2 アプリが最新の WebView2 機能とセキュリティ更新プログラムを利用できます。 Evergreen 配布モードには、次の特性があります。

  • WebView2 ランタイムは、ユーザーからの労力を必要とせずに自動的に更新されます。
  • Evergreen 配布モードを使用する WebView2 アプリはすべて、Evergreen WebView2 ランタイムの共有コピーを使用し、ディスク領域を節約します。
  • 適格なシステムでは、Microsoft Edge と Evergreen WebView2 ランタイムのバイナリは、同じバージョンの場合に一緒にハードリンクされます。 このリンクは、ディスクフットプリント、メモリ、およびパフォーマンスの利点を提供します。

WebView2 ランタイムの Evergreen 配布モードを使用すると、WebView2 アプリはクライアントが最新のランタイムを持つと見なします。 クライアント上のすべてのアプリに対して、アプリで WebView2 ランタイムの特定のバージョンを要求することはできません。 新しい WebView2 SDK パッケージがリリースされる前に、互換性のあるバージョンの WebView2 ランタイムが既にクライアントに配布されています。 したがって、WebView2 アプリが WebView2 SDK の最新バージョンにある API を使用して問題ない場合があります。

詳細については、「ブラウザーのバージョン と WebView2 について」に移動します

エバーグリーン WebView2 ランタイムの展開

デバイス上のすべてのエバーグリーン アプリに必要なエバーグリーン WebView2 ランタイムのインストールは 1 つだけです。 「WebView2 ランタイムのダウンロード」では、Evergreen ランタイムの展開に役立ついくつかのツールを利用できます。

  • オンライン クライアントの場合: WebView2 ランタイム ブートストラップは 、小さな (約 2 MB) インストーラーです。 WebView2 ランタイム ブートストラップは、ユーザーのデバイス アーキテクチャに一致する Microsoft サーバーから Evergreen ランタイムをダウンロードしてインストールします。

    • WebView2 アプリのセットアップ部分で、ブートストラップにリンクします。 ブートストラップをプログラムでダウンロードするには、リンクを使用します。上記の ダウンロード ページで [リンクの 取得] ボタンを選択します。
    • または、ブートストラップをダウンロードし、WebView2 アプリでパッケージ化します。
  • オフライン クライアントの場合: WebView2 ランタイム スタンドアロン インストーラーは、オフライン環境に Evergreen WebView2 ランタイムをインストールする完全なインストーラーです。

現在、ブートストラップインストーラーとスタンドアロン インストーラーの両方がコンピューターごとのインストールのみをサポートしています。アクセス許可の昇格が必要です。 昇格せずにインストーラーを実行すると、アクセス許可を昇格するように求めるメッセージが表示されます。

次のオンライン展開ワークフローまたはオフライン展開ワークフローを使用して、アプリを起動する前にランタイムが既にインストールされていることを確認します。 シナリオに応じてワークフローを調整できます。 サンプル コードは、サンプルのリポジトリで利用可能です。

オンラインのみの展開

ユーザーがインターネットにアクセスできると想定されるオンライン専用の展開シナリオがある場合は、次のワークフローを使用します。

  1. アプリのセットアップ中にテストを実行して、WebView2 ランタイムが既にインストールされていることを確認します。 ランタイムがインストールされていることを確認するには、次のいずれかの方法を使用します。

    • 次の pv (REG_SZ) 場所にある WebView2 ランタイムのレジストリ キーを調します。 この regkey が存在しない場合、または存在する場合、または空の文字列である場合は null 、WebView2 ランタイムがクライアントにインストールされていないという意味です。 この regkey を使用して、WebView2 ランタイムがインストールされているかどうかを検出し、WebView2 ランタイムのバージョンを取得します。 次 pv (REG_SZ) の場所で検索します。

      64 ビット の場合Windows。

      HKEY_LOCAL_MACHINE\SOFTWARE\WOW6432Node\Microsoft\EdgeUpdate\Clients\{F3017226-FE2A-4295-8BDF-00C3A9A7E4C5}
      

      32 ビット の場合Windows。

      HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\EdgeUpdate\Clients\{F3017226-FE2A-4295-8BDF-00C3A9A7E4C5}
      
    • または 、GetAvailableCoreWebView2BrowserVersionString を実行し、 が versionInfo NULL . NULL ランタイムがインストールされていないかどうかを示します。

  2. ランタイムがインストールされていない場合は、アプリのセットアップ プロセスでリンク (ダウンロード ページ**** の [リンクの取得] ボタンから) を使用して、WebView2 ランタイム ブートストラップをプログラムでダウンロードします。

  3. コマンドを発行して、管理者特権のプロセスまたはコマンド プロンプトから WebView2 ランタイム ブートストラップを呼び出します MicrosoftEdgeWebview2Setup.exe /silent /install

上記のワークフローには、いくつかの利点があります。

  • ランタイムは、必要な場合にのみインストールされます。
  • ランタイム インストーラーを WebView2 アプリでパッケージ化する必要はありません。
  • WebView2 ランタイム ブートストラップは、デバイスのアーキテクチャ (プラットフォーム) を自動的に検出し、一致する WebView2 ランタイムをインストールします。
  • ランタイムはサイレント インストールされます。

または、上記のようにリンクを取得してブートストラップ をオンデマンドでプログラムでダウンロードする代わりに、アプリで WebView2 ランタイム用の Evergreen ブートストラップをパッケージ化することもできます。

オフラインの展開

アプリの展開が完全にオフラインで動作する必要があるオフライン展開シナリオがある場合は、次のワークフローを使用します。

  1. 開発マシンに WebView2 ランタイムをダウンロードから Evergreen スタンドアロン インストーラー をダウンロードします。 Evergreen スタンドアロン インストーラーは、WebView2 Evergreen ランタイムをクライアントにインストールします。

  2. アプリ インストーラーまたはアップデータに Evergreen スタンドアロン インストーラーを含める。

  3. アプリのセットアップ中に、次のいずれかの方法で WebView2 ランタイムが既にインストールされているかどうかをテストします。

    • regkey が pv (REG_SZ) 存在するかどうか、および regkey が空か確認 null します。 この regkey が存在しない場合、または空の文字列である場合 null 、WebView2 ランタイムは現在クライアントにインストールされていません。 次 pv (REG_SZ) の場所から検索します。

      64 ビット の場合Windows。

      HKEY_LOCAL_MACHINE\SOFTWARE\WOW6432Node\Microsoft\EdgeUpdate\Clients\{F3017226-FE2A-4295-8BDF-00C3A9A7E4C5}
      

      32 ビット の場合Windows。

      HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\EdgeUpdate\Clients\{F3017226-FE2A-4295-8BDF-00C3A9A7E4C5}
      
    • または 、GetAvailableCoreWebView2BrowserVersionString を呼び出して、 versionInfo NULL が . この versionInfo 場合 NULL 、WebView2 ランタイムは現在クライアントにインストールされていません。

  4. WebView2 ランタイムがインストールされていない場合は、Evergreen スタンドアロン インストーラーを実行します。 サイレント インストールを実行する場合は、管理者特権のプロセスからインストーラーを実行するか、次のコマンドをコピーして実行します。

    MicrosoftEdgeWebView2RuntimeInstaller{X64/X86/ARM64}.exe /silent /install
    

アプリの前方互換性をテストする

Web は常に進化しています。 Evergreen 配布モードでは、WebView2 ランタイムはクライアント上で自動的に最新の状態に保たれ、最新の機能とセキュリティ修正プログラムを提供します。 Evergreen 配布を使用する場合は、WebView2 アプリが Web との互換性を確保するために、テスト インフラストラクチャをセットアップする必要があります。

Microsoft Edgeチャネル (Beta、Dev、Canary) を使用すると、WebView2 ランタイムで次に何が来るのかを確認できます。 WebView2 アプリを定期的にプレビュー チャネルMicrosoft Edgeテストし、問題が発生した場合はアプリまたはレポートの問題を更新します。 Canary は、最速のケイデンスに出荷され、最新の API を持つため、推奨されるプレビュー チャネルです。

適切なチャネルを判断するには、「Microsoft Edge チャネルの概要」を参照してください。 テスト環境でMicrosoft Edge Insider チャネルをダウンロードし、テスト アプリのチャネルの基本設定を示す変数または regkey 環境変数を使用できます。

詳細については、「CreateCoreWebView2EnvironmentWithOptions」を参照してください。 「自動化」の説明に従って WebDriver を使用してWebView2テストを自動化し、WebView2 をドライバーでテストMicrosoft Edgeできます。

最近の API を使用する場合の機能検出

Evergreen モードを使用する場合、WebView2 アプリが最近の SDK から新しい WebView2 API を使用する場合は、クライアントのコンピューターに新しい API が存在するか、などの方法を使用する必要があります。 QueryInterface try-catch WebView2 ランタイムが更新されない場合もありますので、この機能検出はベスト プラクティスです。

Evergreen 配布モードを使用している場合でも、WebView2 ランタイムは更新されない可能性があります。次の理由により、

  • 管理者がデバイスを更新する制御を持つため、IT 管理者は WebView2 ランタイムの更新をオフにできます。
  • オフラインのクライアントは、更新された WebView2 ランタイムを受信しません。

WebView2 ランタイムMicrosoft Edge更新ポリシーは別個です。 IT 管理者が Microsoft _Edge_の自動更新を無効にした場合でも、管理者がランタイム更新をオフにしない限り、WebView2 ランタイム は自動的に更新されます。 管理者が更新プログラムの更新を無効Microsoft Edge (これはやや一般的です)、クライアント コンピューターで使用できる WebView2 API には影響を与えられません。

詳細については、「フィーチャー検出」に移動して、インストールされているランタイムが最近追加した API をサポート するかどうかをテストします

固定バージョンランタイム配布モードの詳細

厳密な互換性要件がある制約のある環境では、固定バージョンの配布モードの使用を検討してください。 固定バージョンの配布モードは、以前は bring-your-own と呼ばれていました

固定バージョン配布モードでは、アプリの WebView2 ランタイムを更新するタイミングを制御します。 WebView2 ランタイムの特定のバージョンをダウンロードし、WebView2 アプリでパッケージ化します。 クライアント上の WebView2 ランタイムは自動的には更新されません。 代わりに、パッケージ化され、更新されたアプリと共に配布される WebView2 ランタイムを定期的に更新します。 固定バージョンのアプローチでは、WebView2 ランタイムのレジストリ キーは使用されません。

固定バージョン配布モードを使用するには、次のコマンドを実行します。

  1. パッケージとして、「WebView2 ランタイムをダウンロードする」から 固定バージョンの WebView2 ランタイムをダウンロードします。

    最新および 2 番目に更新されたメジャー リリースの最もパッチが適用されたバージョンは、このサイトでダウンロードできます。 必要なバージョンのアーカイブ されたコピーを保持します。

  2. コマンド ライン コマンドを使用するか、WinRAR などの圧縮解除ツールを使用して WebView2 ランタイム パッケージを expand {path to the package} -F:* {path to the destination folder} 解凍します。 この方法では正しいフォルダー構造が生成されない可能性があるため、エクスプローラーを使用して解凍しないようにします。

  3. 展開された固定バージョンのバイナリをプロジェクトに含めます。

  4. WebView2 環境を作成するときに、固定バージョンのバイナリへのパスを指定します。

    • Win32 C/C++ では 、CreateCoreWebView2EnvironmentWithOptions 関数を使用して環境を作成できます。 パラメーターを browserExecutableFolder 使用して、含まれるフォルダーへのパスを指定します msedgewebview2.exe

    • .NET の場合、WebView2 プロパティを有効にする前に Source 環境を指定する必要があります。 .NET では、次のいずれかの方法で環境を指定できます。

      • 要素の CreationProperties (WPF / WinForms) プロパティを設定 WebView2 します。 CoreWebView2CreationProperties (WPF/WinForms) クラスの BrowserExecutableFolder メンバーを使用して、固定バージョンのバイナリへのパスを指定します。

      • または EnsureCoreWebView2Async 、(WPF / WinForms) を使用して環境を指定します。 CoreWebView2Environment.CreateAsyncbrowserExecutableFolder パラメーターを使用して、固定バージョンのバイナリへのパスを指定します。

  5. 固定バージョンのバイナリをアプリにパッケージ化して配付します。 必要に応じてバイナリを更新します。

固定バージョンの既知の問題

  • 現在、固定バージョンはネットワークの場所または UNC パスから実行できません。

  • クライアントに固定バージョンの WebView2 ランタイムをインストールすると、Microsoft PlayReady停止します。 PlayReady のセットアップを次のように修正します。

    1. 次の場所など、ユーザーのデバイスに固定バージョン パッケージを展開するパスを指定ます。

      D:\myapp\Microsoft.WebView2.FixedVersionRuntime.87.0.664.8.x64
      
    2. ユーザーのデバイスで次のコマンドを実行します。

      icacls {Fixed Version path} /grant *S-1-15-2-2:(OI)(CI)(RX)
      icacls {Fixed Version path} /grant *S-1-15-2-1:(OI)(CI)(RX)
      
    3. これで PlayReady はユーザーのデバイスで動作しているはずです。 PlayReady が正しくインストールされていることを確認するには、**** 固定バージョン フォルダー**** の [セキュリティ] タブで、以下に示すように、アクセス許可が付与されていることを ALL APPLICATION PACKAGES ALL RESTRICTED APPLICATION PACKAGES 確認します。

      PlayReady のアクセス許可

アプリと一緒に出荷するファイル

コード WebView2Loader はアプリに同梱されている必要があります。 これは、アプリ バイナリ に静的にリンクするか、アプリのアーキテクチャに一致するバイナリを含 WebView2Loader.lib WebView2Loader.dll めて行います。

WebView2Loader.dll はネイティブおよびアーキテクチャ固有のバイナリなので、アプリが実行される必要があるこのバイナリのすべてのフレーバーを含める必要があります。 たとえば、x86 の場合は x86 バージョンを含め WebView2Loader.dll 、AnyCPU には x86、x64、arm64 のバージョンを含める必要があります WebView2Loader.dll 。 管理アプリの場合、適切なバージョンのアーキテクチャ固有のフォルダー WebView2Loader.dll から読み込まれます。

ネイティブ アプリ フォルダー構造の例:

\<myApp>
    \WebView2Loader.dll

.NET マネージ アプリの場合は、コア WebView2 機能 ( ) および Microsoft.Web.WebView2.Core.dll WPF/WinForms 固有の機能 (または Microsoft.Web.WebView2.Winforms.dll Microsoft.Web.WebView2.WPF.dll ) の WebView2 .NET アセンブリも含める必要があります。

ネイティブ アプリ フォルダー構造の例:

\<myApp>
    \Microsoft.Web.WebView2.Core.dll
    \Microsoft.Web.WebView2.Winforms.dll
    \Microsoft.Web.WebView2.WPF.dll
    \runtimes
        \win-arm64\native\WebView2Loader.dll (arm64)
        \win-x64\native\WebView2Loader.dll (x64)
        \win-x86\native\WebView2Loader.dll (x86)