ユーザー データ フォルダーを管理する

ユーザー データ フォルダー (UDF) は、ホスト アプリと WebView2 に関連するデータを含む、ユーザーのコンピューターに格納されているフォルダーです。 WebView2 アプリでは、ユーザー データ フォルダーを使用して、Cookie、アクセス許可、キャッシュされたリソースなどのブラウザー データを格納します。

用語:

用語 定義
ユーザー データ フォルダー Cookie、アクセス許可、キャッシュされたリソースなどのブラウザー データを格納するために WebView2 によって作成されるフォルダー。
Udf ユーザー データ フォルダー。
UDF の場所 ユーザー データ フォルダーのディレクトリ パス。
既定の UDF の場所 ユーザー データ フォルダーの既定のディレクトリ パス。 カスタム UDF の場所を指定しない場合に WebView2 によって UDF が作成されるディレクトリ パス。
カスタム UDF の場所 ユーザー データ フォルダーのカスタムの場所。 WebView2 ホスト アプリが、WebView2 でユーザー データ フォルダーを作成する場所を指定するディレクトリ パス。

WebView2 は、プラットフォームの既定の場所、またはホスト アプリが明示的に指定するカスタム UDF の場所に UDF を作成します。

既定では、WebView2 は特定のプラットフォームの既定の場所に UDF を作成します。 これは一部のプラットフォームではうまく機能しますが、他のプラットフォームでは機能しません。 アプリに特定のニーズがある場合は、カスタム UDF の場所を指定できます。

適切なカスタム UDF の場所

カスタム UDF の場所を指定する場合は、次の要件を満たす必要があります。

  • カスタム UDF の場所には、WebView2 アプリ ランタイムに適切な読み取り/書き込みアクセス許可が必要です。

  • ネットワーク ドライブにユーザー設定を保存しないようにします。 これにより、データの速度低下、クラッシュ、または損失が発生する可能性があります。

UDF に格納されるデータの種類

WebView2 アプリでは、ユーザー データ フォルダー (UDF) を使用して、Cookie、アクセス許可、キャッシュされたリソースなどのブラウザー データを格納します。

データの種類 説明
AllDomStorage DOM ストレージ データ、現在および将来。 この閲覧データのFileSystems種類には、、、WebSqlIndexedDbCacheStorageが含まれます。
AllProfile 新しいプロファイルのように見せるためにワイプする必要があるプロファイル データ。 これにより、パスワードなどのアカウントスコープのデータは削除されませんが、ユーザーをサインアウトすることで、アカウントスコープのデータへのアクセスが削除されます。現在および将来のすべてのプロファイル データ。 今後、このデータ型に新しいプロファイル データ型が追加される可能性があります。 この閲覧データの種類には、および のデータの種類AllSiteDownloadHistoryGeneralAutofillPasswordAutosaveDiskCacheBrowsingHistorySettings含まれます。
AllSite 現在と将来のすべてのサイト データ。 この閲覧データの種類には、データの種類 AllDomStorageCookiesが含まれます。 今後、このデータ型に新しいサイト データ型が追加される可能性があります。
BrowsingHistory 閲覧履歴データ。
CacheStorage CacheStorage DOM API によって格納されたデータ。
Cookies HTTP Cookie データ。
DiskCache ディスク キャッシュ。
DownloadHistory 履歴データをダウンロードします。
FileSystems ファイル システム データ。
GeneralAutofill 一般的なオートフィル フォーム データ。 パスワード情報は除外され、名前、番地とメール アドレス、電話番号、任意の入力などの情報が含まれます。 支払いデータが含まれます。
IndexedDb IndexedDB DOM 機能によって格納されるデータ。
LocalStorage localStorage DOM API によって格納されたデータ。
PasswordAutosave パスワード自動保存データ。
Settings 設定データ。
WebSql Web SQL データベース DOM API によって格納されるデータ。

上記の種類のデータは、 CoreWebView2BrowsingDataKinds 列挙型の列挙型メンバーとして一覧表示されます。

UDF を作成する方法とタイミング

ユーザー データ フォルダー (UDF) は、WebView2 コントロールによって WebView2 ホスト アプリ用に作成されます。

UDF は、プラットフォームの既定の UDF の場所に作成されます。または、ホスト アプリでカスタム UDF の場所が指定されている場合、UDF はカスタム UDF の場所に作成されます。

UDF が存在しない場合、UDF は WebView2 ホスト アプリの起動時に作成されます。

作成される UDF の数

WebView2 コントロールの各インスタンスは、ユーザー データ フォルダー (UDF) に関連付けられています。

各 WebView2 セッションには UDF が必要です。 WebView2 セッションごとにアクティブな UDF は 1 つだけです。

アプリ WebView2 セッションごとに少なくとも 1 つの UDF があります。 カスタム UDF の場所を指定することで、ホスト アプリが重複する可能性があります。 または、マシンごとに 1 つの UDF を使用できます。 これは、ホスト アプリが UDF を構成する方法によって異なります。

UDF は、アプリがユーザーごとにインストールされている場合は、ユーザーごとにどちらでもかまいません。 ホスト アプリがユーザーごとにインストールされている場合、指定されていない場合、各 UDF はユーザーに対して一意です。

UDF を移動する方法

ユーザー データ フォルダー (UDF) を移動するには:

  1. すべての WebView2 セッションをシャットダウンします。

  2. 新しいカスタム UDF の場所を指定して、新しい WebView2 ホスト アプリ セッションを開始します。

既定の UDF の場所

既定のユーザー データ フォルダー (UDF) の場所は、プラットフォームによって異なります。

このプラットフォームでは、既定の UDF の場所は、アプリ実行可能ファイル (.exe) が実行されているディレクトリです。 既定の UDF は、アプリ + .WebView2の実行可能ファイル (exe) パスです。 UDF のファイル名は、アプリの実行可能 (exe) パス + .WebView2です。

たとえば、 を実行D:\WebView2App\WebView2.exeすると、UDF フォルダーが作成されます。 D:\WebView2App\WebView2.exe.WebView2\ 別の例として: WebView2APISample.exe.WebView2\

既定またはカスタム UDF の場所を使用する必要がありますか?

ほとんどの場合、既定の UDF の場所を使用するのではなく、カスタム UDF の場所を指定する必要があります。 これにより、WebView2 コントロールに書き込みアクセス権が付与され、WebView2 コントロールが UDF を作成して書き込むことができます。 以下の「カスタム UDF の場所を指定する」セクションを参照してください。

包装:

Win32 MSIX パッケージはスタンドアロン .exeです。

カスタム UDF の場所の指定

カスタム ユーザー データ フォルダー (UDF) の場所を指定する方法は、プラットフォームによって異なります。

このプラットフォームでは、ほとんどの場合、既定の UDF の場所を使用するのではなく、カスタム UDF の場所を指定する必要があります。 これにより、WebView2 コントロールに書き込みアクセス権が付与され、WebView2 コントロールが UDF を作成して書き込むことができます。

他のすべてのアプリ データが格納されているのと同じフォルダーを指定する必要があります。

カスタム UDF の場所を指定する方法:

ICoreWebView2Environment と パラメーターをuserDataFolder使用します。 ただし、次のコードを使用します。これはリポジトリからの WebView2Samples コードです。

コード例:

std::wstring m_userDataFolder;
m_userDataFolder = L"C:\\MyAppUserDataFolder";
auto options = Microsoft::WRL::Make<CoreWebView2ExperimentalEnvironmentOptions>();

HRESULT hr = CreateCoreWebView2EnvironmentWithOptions(
    NULL, m_userDataFolder.c_str(), options.Get(),
    Callback<ICoreWebView2CreateCoreWebView2EnvironmentCompletedHandler>(
        this, &AppWindow::OnCreateEnvironmentCompleted)
        .Get());

コード例については、WebView2Samples リポジトリ > WebView2APISample の近くにある Win32 に適した .cpp.csファイルを参照してください。

ブラウザー データが UDF 内に格納される場所:

セッションと UDF の作成後、WebView2 コントロールのブラウザー データは のサブフォルダー userDataFolderに格納されます。

このプラットフォームでカスタム UDF の場所を使用する必要がある理由:

カスタム UDF の場所を指定しない場合、インストーラー テクノロジを使用すると、既定の場所で実行時エラーが発生する可能性があります。これは、インストーラー テクノロジによってアプリが配置されるため、UDF がファイル システムの保護領域に配置されるためです。WebView2 は UDF を作成できないため、UDF の作成は通常失敗します。 WebView2 では、UDF をその場所に作成できないことをホスト アプリに知らせるエラーがスローされます。

ユーザーが書き込みアクセス権を持たない場所からホスト アプリを実行している場合、WebView2 は UDF を作成できず、WebView2 の起動時にランタイム エラーが発生します。

UDF の場所の取得

ユーザー データ フォルダー (UDF) の場所がに設定された内容を確認するには、 プロパティを UserDataFolder 使用します。 この読み取り専用プロパティは、WebView2 アプリの UDF の場所を返します。

UDF の場所を読み取る理由:

  • セッションの終了時など、UDF フォルダーから閲覧データを消去する場合。

  • UDF を削除する場合。

Win32 ICoreWebView2Environment7.get_UserDataFolder プロパティ getter を使用します。 その API リファレンス ページには、 プロパティの読み取り方法を示すコード例が UserDataFolder 含まれています。

コード例:

auto environment7 = m_webViewEnvironment.try_query<ICoreWebView2Environment7>();
CHECK_FEATURE_RETURN(environment7);
wil::unique_cotaskmem_string userDataFolder;
environment7->get_UserDataFolder(&userDataFolder);

プロパティの読み取りの UserDataFolder 例については、 WebView2Samples リポジトリの Win32 サンプルを参照してください。

UDF の領域をクリアする

ユーザー データ フォルダー (UDF) を削除する代わりに、UDF から参照データをクリアします。 たとえば、ユーザーがサインアウトしたときにユーザー データと履歴をクリアします。

ユーザー データ フォルダーから閲覧データを消去する」を参照してください

エラー メッセージの処理

ユーザー データ フォルダー (UDF) に書き込みアクセス許可がない場合は、次のエラー メッセージ文字列が返される可能性があります。

  • User data folder cannot be created because a file with the same name already exists.
  • Unable to create user data folder, Access Denied.

上記は、ユーザー データ フォルダーの場所が既定の UDF の場所かカスタム UDF の場所かに関係なく当てはまります。

メモリが不足しているか、Microsoft Edge ランタイムを起動できない場合、または WebView2 ランタイムが見つからない場合は、次のようなエラー メッセージ文字列が返されることがあります。

  • Microsoft Edge runtime unable to start
  • Failed to create WebView2 environment

これらのエラーを処理するコード (コードなど try/catch ) を追加します。 これらのエラーは、回復できない致命的なエラーになる傾向があるため try/catch 、アプリがクラッシュするのを防ぎます。 その後、エラーを検出し、アプリを正常に閉じることができるでしょう。 書き込みアクセス許可のないユーザー データ フォルダーを使用する場合など Access Denied 、一部のエラーは回復できません。

エラー メッセージ文字列がダイアログに表示されます。

さまざまなシナリオでユーザー データ フォルダーを保持するかどうか

ホスト アプリは、ユーザー データ フォルダー (UDF) の有効期間を制御します。 アプリでアプリ セッションのユーザー データを再利用する場合は、UDF を保存 (つまり削除しない) することを検討してください。

アプリがアプリ セッションのユーザー データを再利用しない場合は、UDF を削除できます。 ただし、セッションの実行中は、UDF を削除するのではなく 、クリアブラウズ データ メソッドを呼び出す方が良いです。

同じユーザーがアプリを繰り返し使用し、アプリの Web コンテンツがユーザーのデータに依存している場合のユーザー データ フォルダーの永続化

このシナリオでは、ユーザー データ フォルダー (UDF) を明示的に削除しないでください。データを保持します。

複数のユーザーがアプリを繰り返し使用する場合のユーザー データ フォルダーの永続化

複数のユーザーがアプリを繰り返し使用する場合は、新しいユーザーごとに新しいユーザー データ フォルダー (UDF) を作成し、各ユーザーの UDF を保存する必要があります。

WebView2 コントロールは、新しいユーザーごとに新しい UDF を作成します。 WebView2 コントロールは、セッションごとに 1 つの UDF を作成します。 複数の WebView2 セッションがある場合、WebView2 コントロールは複数の UDF を作成します。 通常、ホスト アプリに複数の WebView2 コントロール インスタンスがある場合、ホスト アプリは WebView2 のすべてのインスタンスを同じ UDF にポイントする必要があります。

WebView2 コントロール インスタンスを持つ各ホスト アプリには、独自の UDF があります。 ホスト アプリは、各 UDF が同じ場所を指すことができます。

ホスト アプリが複数のユーザー用の場合は、ユーザーごとに 1 つの UDF を作成する必要があります。 アプリがユーザーごとにインストールされている場合、その動作は次のようになります。

ホスト アプリの 2 つのコピーを起動すると、同じ UDF が使用されます。

  • Win32 ホスト アプリの場合、UDF は自動的に削除されません。
  • .NET (WPF & WinForms) ホスト アプリの場合、UDF は自動的に削除されません。
  • ClickOnce ホスト アプリの場合、UDF は自動的に削除されます。
  • WinUI 2 (UWP) ホスト アプリの場合、UDF は自動的に削除されません。
  • WinUI 3 ホスト アプリの場合、UDF は自動的に削除されません。

ホスト アプリのアンインストール

WebView2 ホスト アプリをアンインストールすると、標準のアンインストール プロセスが使用されます。このプロセスは WebView2 に固有ではありません。

アンインストール中に、インストーラーで作成された UDF をクリーンする必要がある場合があります。 場合によっては、UDF を保持したい場合があります。

ホスト アプリを作成し、MSIX インストーラーを作成し、ホスト アプリをインストールしてからホスト アプリを実行すると、UDF が作成されます。 ただし、ホスト アプリをアンインストールすると、UDF が自動的にクリーンされないため (アンインストーラーはユーザー データを保護して保持するため)、アンインストール プロセスでその考慮事項を認識する必要があります。

ClickOnce アプリでは、1 つの場所にインストールされ、セッションが終了するとツリー全体が削除されるため、UDF は自動的に削除されます。 これは、WebView2 のしくみではなく、ClickOnce のしくみが原因です。

アプリに繰り返しユーザーがない場合のユーザー データ フォルダーの永続化

このシナリオでは、ユーザーごとに新しいユーザー データ フォルダー (UDF) を作成し、前の UDF を削除します。

ユーザー データ フォルダーの削除

ホスト アプリまたはアンインストーラーは、ユーザー データ フォルダー (UDF) を削除できます。 次のいずれかの理由で UDF を削除する必要がある場合があります。

  • パッケージ化された Windows ストア アプリをアンインストールする場合。 この場合、Windows は UDF を自動的に削除します。

  • すべての閲覧データ履歴をクリーンする場合。 ただし、より簡単で柔軟なアプローチとして、最初に 明確な閲覧データ メソッドを参照してください。

  • データの破損から回復する場合。

  • 以前のセッション データを削除する場合。

  • UDF の場所を変更する場合。 UDF の場所を変更した場合、前の UDF は自動的にクリーンアップされません。

UDF を削除する前に WebView2 セッションを終了する

ユーザー データ フォルダー (UDF) を削除するには、まず WebView2 セッションを終了する必要があります。 WebView2 セッションが現在アクティブな場合、UDF を削除することはできません。

UDF を削除する前に、ブラウザー プロセスが終了するのを待ちます

WebView2 ホスト アプリが閉じてもファイルがまだ使用されている場合は、ブラウザー プロセスが終了するまで待ってから、ユーザー データ フォルダー (UDF) を削除します。

UDF 内のファイルは、WebView2 アプリが閉じられた後も引き続き使用されている可能性があります。 このような場合は、UDF を削除する前に、ブラウザー プロセスとすべての子プロセスが終了するまで待ちます。 プロセスが終了するのを待機するプロセスを監視するには、WebView2 アプリ インスタンスの プロパティを使用 BrowserProcessId して、ブラウザー プロセスのプロセス ID を取得します。

ユーザー データ フォルダーの共有

WebView2 コントロール インスタンスは、同じユーザー データ フォルダー (UDF) を共有して、次の操作を行うことができます。

UDF を共有する場合は、次の点を考慮してください。

  • webView2 コントロールを再作成して 、add_NewBrowserVersionAvailable (Win32) イベント ハンドラーまたは NewBrowserVersionAvailable (.NET) イベントを使用してブラウザーのバージョンを更新する場合、ホスト アプリは、ブラウザーが同じ UDF を共有するすべての WebView2 コントロールを終了して閉じる必要があります。 ブラウザー プロセスのプロセス ID を取得するには、WebView2 コントロールの プロパティを使用 BrowserProcessId します。

一度に実行するフォルダーが多すぎるのを避ける

アプリのさまざまな部分を分離したり、WebView2 コントロール間でデータを共有する必要がない場合は、さまざまなユーザー データ フォルダー (UDF) を使用できます。 たとえば、アプリは、広告を表示するための 2 つの WebView2 コントロールと、アプリ コンテンツを表示するためのコントロールで構成できます。 WebView2 コントロールごとに異なる UDF を使用できます。

各 WebView2 ブラウザー プロセスでは、追加のメモリとディスク領域が消費されます。 そのため、異なる UDF が多すぎる WebView2 コントロールを同時に実行しないようにしてください。

複数の UDF ではなく、複数のプロファイルを使用して、異なる WebView2 コントロールのブラウザー データ ストレージの分離を実現できます。 各プロファイルは、同じ共有 UDF の下の専用フォルダーにブラウザー データを保存します。 「1 つのユーザー データ フォルダーで複数のプロファイルをサポートする」を参照してください

関連項目