.NET混合开发解决方案16 管理WebView2的用户数据
WebView2控件应用详解系列博客
.NET混合开发解决方案2 WebView2与Edge浏览器的区别
.NET混合开发解决方案5 WebView2运行时与分发应用
.NET混合开发解决方案7 WinForm程序中通过NuGet管理器引用集成WebView2控件
.NET混合开发解决方案8 WinForm程序中通过设置固定版本运行时的BrowserExecutableFolder属性集成WebView2控件
.NET混合开发解决方案10 WebView2控件调用网页JS方法
.NET混合开发解决方案12 网页JS调用C#方法访问WinForm或WPF窗体
.NET混合开发解决方案13 自定义WebView2中的上下文菜单
在我的博客《.NET混合开发解决方案15 WebView2控件集成到WinForm程序编译后的文件及结构说明》中介绍了将WebView2控件集成到WinForm程序中编译后的文件及结构信息

当运行WinForm程序并使用WebView2控件加载网页后

应用程序目录中又多了一个目录“XXXX.WebView2”,其中XXXX是应用程序的名称

这个目录就是WebView2控件运行后产生的针对本项目的用户数据文件夹。
用户数据文件夹(User Data Folder)是存储在用户计算机上的文件夹,其中包含与主机应用和 WebView2 相关的数据。
几个术语
- 用户数据文件夹 WebView2 创建的用于存储浏览器数据的文件夹,例如 Cookie、权限和缓存资源。
- UDF 位置 用户数据文件夹的目录路径。
- 默认 UDF 位置 用户数据文件夹的默认目录路径。 如果未指定自定义 UDF 位置,则 WebView2 将在其中创建 UDF 的目录路径。
- 自定义 UDF 位置 用户数据文件夹的自定义位置。 WebView2 主机应用指定 WebView2 将创建用户数据文件夹的位置的目录路径。
默认情况下,WebView2 在特定平台的默认位置创建 UDF。 这适用于某些平台,但不适用于其他平台。 如果应用有特定需求,可以指定自定义 UDF 位置。 确保指定的自定义 UDF 位置对 WebView2 应用运行时具有适当的读/写权限。
通过如下逻辑代码指定自定义UDF位置。此代码必须在初始化CoreWebView2属性之前执行。CoreWebView2一旦被初始化就不允许更改UserDataFolder的位置。

确保指定的自定义 UDF 位置对 WebView2 应用运行时具有适当的读/写权限。
如果用户数据文件夹 (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 位置,上述内容均为 true。
如果内存不足,或者Microsoft Edge运行时无法启动,或者找不到 WebView2 运行时,可能会返回类似于以下内容的错误消息字符串:
Microsoft Edge runtime unable to startFailed to create WebView2 environment
添加代码(如代码) try/catch 以处理这些错误。 这些错误往往是无法从中恢复的致命错误,因此 try/catch 会防止应用崩溃。 然后,你将能够检测到故障并正常关闭应用。 某些错误是无法恢复的,例如 Access Denied ,尝试使用没有写入权限的用户数据文件夹时。错误消息字符串显示在对话框中。
运行程序后,在D:\WebView2Demo_WinForm_UDF位置产生了用户数据文件夹及数据信息

为什么要自定义UDF位置
不指定UDF位置时,默认在应用程序的根目录下自动创建该目录。如果应用程序需要卸载然后重新安装,那么之前的UDF中的数据无法被重用。
自定义UDF位置后,应用程序可以随意安装、转移、卸载,UDF中的数据一直可以被使用。
WebView2 应用使用用户数据文件夹 (UDF) 来存储浏览器数据,例如 Cookie、权限和缓存的资源。通过 CoreWebView2BrowsingDataKinds 枚举可以检索每一个数据项

WebView2控件为 WebView2 主机应用创建用户数据文件夹 (UDF) 。UDF 是在平台的默认 UDF 位置中创建的,或者如果主机应用指定了自定义 UDF 位置,则会在自定义 UDF 位置中创建 UDF。如果 UDF 不存在,则会在启动 WebView2 主机应用时创建 UDF。
WebView2 控件的每个实例都与用户数据文件夹 (UDF) 相关联。
每个 WebView2 会话必须具有 UDF。 每个 WebView2 会话只有 1 个活动 UDF。
每个应用 WebView2 会话至少有一个 UDF。 主机应用可以通过指定自定义 UDF 位置来重叠它们。 或者,每台计算机可以有一个 UDF。 这取决于主机应用如何配置 UDF。
如果每个用户安装了应用,则 UDF 可以是每个用户。 如果主机应用是按用户安装的,则每个 UDF 对于用户是唯一的(如果未指定)。
若要将用户数据文件夹移 (UDF) :
(1)关闭所有 WebView2 会话。
(2)启动新的 WebView2 主机应用会话,指定新的自定义 UDF 位置。
若要清除 WebView2 应用的用户数据文件夹中的浏览数据并释放空间,而不是 (UDF) 删除用户数据文件夹,请调用 Clear Browsing Data API 的方法。
使用 Clear Browsing Data API,可以以编程方式清除与 WebView2 用户配置文件关联的 用户数据文件夹 中的数据。 例如,使用此 API 在用户注销时清除用户数据和历史记录。可以如下操作:
CoreWebView2Profile webViewProfile = webView2.CoreWebView2.Profile;
CoreWebView2Profile 类目前仅在 WebView2.NET Prerelease 预发布版本中提供,版本:1.0.1018, 1.0.1056, 1.0.1083, 1.0.1133, 1.0.1158, 1.0.1189, 1.0.1222。 其他正式版中暂时不提供。
- 清除所有浏览数据
await webViewProfile.ClearBrowsingDataAsync();
- 清除所选类型的浏览数据
无论何时创建数据,此方法都会清除指定类型的浏览数据。 它从调用该方法的用户配置文件的用户数据文件夹中清除数据。
await webViewProfile.ClearBrowsingDataAsync(CoreWebView2BrowsingDataKinds.AllProfile);
其中 CoreWebView2BrowsingDataKinds 枚举提供了各种类型的数据,参考具体的枚举定义

/// <summary>
/// Indicates the kind of browsing data to clear. Or operations can be applied to create a mask representing multiple CoreWebView2BrowsingDataKinds. The resulting mask may be passed to <see cref="M:Microsoft.Web.WebView2.Core.CoreWebView2Profile.ClearBrowsingDataAsync(Microsoft.Web.WebView2.Core.CoreWebView2BrowsingDataKinds,System.DateTime,System.DateTime)" /> to clear the corresponding data.
/// </summary>
[Flags]
public enum CoreWebView2BrowsingDataKinds
{
/// <summary>Specifies file systems data.</summary>
FileSystems = 1,
/// <summary>Specifies data stored by the IndexedDB DOM feature.</summary>
IndexedDb = 2,
/// <summary>Specifies data stored by the localStorage DOM API.</summary>
LocalStorage = 4,
/// <summary>
/// Specifies data stored by the Web SQL database DOM API.
/// </summary>
WebSql = 8,
/// <summary>Specifies data stored by the CacheStorage DOM API.</summary>
CacheStorage = 16, // 0x00000010
/// <summary>
/// Specifies DOM storage data, now and future. This browsing data kind is inclusive of CoreWebView2BrowsingDataKinds.FileSystems, CoreWebView2BrowsingDataKinds.IndexedDb, CoreWebView2BrowsingDataKinds.WebSql, CoreWebView2BrowsingDataKinds.CacheStorage. New DOM storage data types may be added to this data kind in the future.
/// </summary>
AllDomStorage = 32, // 0x00000020
/// <summary>Specifies HTTP cookies data.</summary>
Cookies = 64, // 0x00000040
/// <summary>
/// Specifies all site data, now and future. This browsing data kind is inclusive of CoreWebView2BrowsingDataKinds.AllDomStorage and CoreWebView2BrowsingDataKinds.Cookies. New site data types may be added to this data kind in the future.
/// </summary>
AllSite = 128, // 0x00000080
/// <summary>Specifies disk cache.</summary>
DiskCache = 256, // 0x00000100
/// <summary>Specifies download history data.</summary>
DownloadHistory = 512, // 0x00000200
/// <summary>
/// Specifies general autofill form data. This excludes password information and includes information like: names, street and email addresses, phone numbers, and arbitrary input. This also includes payment data.
/// </summary>
GeneralAutofill = 1024, // 0x00000400
/// <summary>Specifies password autosave data.</summary>
PasswordAutosave = 2048, // 0x00000800
/// <summary>Specifies browsing history data.</summary>
BrowsingHistory = 4096, // 0x00001000
/// <summary>Specifies settings data.</summary>
Settings = 8192, // 0x00002000
/// <summary>
/// Specifies profile data that should be wiped to make it look like a new profile. This does not delete account-scoped data like passwords but will remove access to account-scoped data by signing the user out. Specifies all profile data, now and future. New profile data types may be added to this data kind in the future. This browsing data kind is inclusive of <see cref="F:Microsoft.Web.WebView2.Core.CoreWebView2BrowsingDataKinds.AllSite" />, <see cref="F:Microsoft.Web.WebView2.Core.CoreWebView2BrowsingDataKinds.DiskCache" />, <see cref="F:Microsoft.Web.WebView2.Core.CoreWebView2BrowsingDataKinds.DownloadHistory" />, <see cref="F:Microsoft.Web.WebView2.Core.CoreWebView2BrowsingDataKinds.GeneralAutofill" />, <see cref="F:Microsoft.Web.WebView2.Core.CoreWebView2BrowsingDataKinds.PasswordAutosave" />, <see cref="F:Microsoft.Web.WebView2.Core.CoreWebView2BrowsingDataKinds.BrowsingHistory" />, <see cref="F:Microsoft.Web.WebView2.Core.CoreWebView2BrowsingDataKinds.Settings" />.
/// </summary>
AllProfile = 16384, // 0x00004000
}
- 清除指定时间范围内的选定类型的浏览数据
DateTime startTime = DateTime.Now.AddHours(-1);
DateTime endTime = DateTime.Now;
CoreWebView2BrowsingDataKinds dataKinds = CoreWebView2BrowsingDataKinds.GeneralAutofill
| CoreWebView2BrowsingDataKinds.PasswordAutosave;
await webViewProfile.ClearBrowsingDataAsync(dataKinds, startTime, endTime);//清除时间范围内选定类型的浏览数据
一、是否在各种方案中保留用户数据文件夹
- 主机应用程序控制用户数据文件夹(UDF)的生存期。如果应用程序重新使用应用程序会话中的用户数据,请考虑保存(即不删除)UDF。
- 如果你的应用程序没有重用应用程序会话中的用户数据,你可以删除UDF。但是,在会话运行时,最好调用clear browsing data方法,而不是删除UDF。
二、如果同一用户重复使用你的应用,并且应用的 Web 内容依赖于用户的数据,则保留用户数据文件夹
在此方案中,请勿显式删除用户数据文件夹 (UDF) ,保留数据。
三、如果多个用户重复使用你的应用,则保留用户数据文件夹
如果多个用户重复使用应用,则应为每个新用户创建新的用户数据文件夹 (UDF) ,并保存每个用户的 UDF。
WebView2 控件为每个新用户创建一个新的 UDF。 WebView2 控件为每个会话创建一个 UDF。 如果有多个 WebView2 会话,WebView2 控件将创建多个 UDF。 通常,如果主机应用具有多个 WebView2 控件实例,则主机应用应将 WebView2 的所有实例指向同一 UDF。
每个具有 WebView2 控件实例的主机应用都将有自己的 UDF。 主机应用可以将每个 UDF 点指向同一位置。
如果主机应用适用于多个用户,则可能应为每个用户创建一个 UDF。 如果你的应用是按用户安装的,则这就是它的工作原理。
如果启动两个主机应用副本,它们将使用相同的 UDF
- 对于 Win32 主机应用,不会自动删除 UDF。
- 对于 .NET (WPF & WinForms) 主机应用,不会自动删除 UDF。
- 对于ClickOnce主机应用,将自动删除 UDF。
- 对于 WinUI 2 (UWP) 主机应用,不会自动删除 UDF。
- 对于 WinUI 3 主机应用,不会自动删除 UDF。
四、卸载主机应用
卸载 WebView2 主机应用程序建议使用标准卸载过程。此过程对 WebView2 并不唯一。
- 卸载期间,安装程序可能需要清理任何创建的 UDF。 在某些情况下,你可能想要保留 UDF。
- 如果创建主机应用、创建 MSIX 安装程序、安装主机应用,然后运行主机应用,则会创建 UDF。 但是,如果卸载主机应用,则不会自动清理 UDF (,因为卸载程序会保护并保留用户数据) ,因此卸载过程需要注意这一注意事项。
- 在ClickOnce应用中,它将安装在单个位置,会话结束时,它会删除整个树,以便自动删除 UDF。 这是因为ClickOnce的工作原理,而不是因为 WebView2 的工作原理。
五、如果应用没有重复用户,请保留用户数据文件夹
在此方案中,为每个用户创建新的用户数据文件夹 (UDF) ,并删除以前的 UDF。
六、删除用户数据文件夹
主机应用或卸载程序可以删除用户数据文件夹 (UDF) 。 出于以下任何原因,可能需要删除 UDF:
如果要卸载打包Windows应用商店应用。 在这种情况下,Windows自动删除 UDF。
如果要清理所有浏览数据历史记录。 但是,请首先调用 clear browsing data 方法。
如果要从数据损坏中恢复。
如果要删除以前的会话数据。
如果要更改 UDF 位置。 如果更改 UDF 位置,则不会自动清理以前的 UDF。
七、在删除 UDF 之前结束 WebView2 会话
若要删除 UDF) (用户数据文件夹,必须先结束 WebView2 会话。 如果 WebView2 会话当前处于活动状态,则无法删除 UDF。
八、在删除 UDF 之前等待浏览器进程退出
如果在 WebView2 主机应用关闭后文件仍在使用中,请等待浏览器进程退出,然后再删除用户数据文件夹 (UDF) 。
关闭 WebView2 应用后,UDF 中的文件可能仍在使用中。 在这种情况下,请等待浏览器进程和所有子进程退出,然后再删除 UDF。 若要监视等待其退出的进程,请使用 WebView2 的 BrowserProcessId 属性检索浏览器进程的进程ID。
九、共享用户数据文件夹
WebView2控件实例可以共享相同的用户数据文件夹(UDF),以执行以下操作:
通过在一个浏览器进程中运行来优化系统资源。 请参阅 WebView2 应用的进程模型。
共享浏览器历史记录和缓存的资源。
共享 UDF 时,请考虑以下事项:
- 重新创建 WebView2 控件以使用 add_NewBrowserVersionAvailable ( Win32) 事件处理程序或 NewBrowserVersionAvailable (.NET) 事件更新浏览器版本时,主机应用必须确保浏览器进程退出并关闭共享同一 UDF 的任何 WebView2 控件。 若要检索浏览器进程的进程 ID,请使用
BrowserProcessIdWebView2 控件的属性。
十、避免一次运行过多的文件夹
若要隔离应用的不同部分,或者当不需要在 WebView2 控件之间共享数据时,可以使用不同的用户数据文件夹 (UDF) 。 例如,应用可以包含两个 WebView2 控件,一个用于显示广告,另一个用于显示应用内容。 可以为每个 WebView2 控件使用不同的 UDF。
每个 WebView2 浏览器进程都会占用额外的内存和磁盘空间。 因此,请避免同时运行具有过多不同 UDF 的 WebView2 控件。
.NET混合开发解决方案16 管理WebView2的用户数据的更多相关文章
- .NET混合开发解决方案13 自定义WebView2中的上下文菜单
系列目录 [已更新最新开发文章,点击查看详细] WebView2控件应用详解系列博客 .NET桌面程序集成Web网页开发的十种解决方案 .NET混合开发解决方案1 WebView2简介 .NE ...
- .NET混合开发解决方案24 WebView2对比CefSharp的超强优势
系列目录 [已更新最新开发文章,点击查看详细] WebView2控件应用详解系列博客 .NET桌面程序集成Web网页开发的十种解决方案 .NET混合开发解决方案1 WebView2简介 .NE ...
- .NET混合开发解决方案14 WebView2的基本身份验证
系列目录 [已更新最新开发文章,点击查看详细] WebView2控件应用详解系列博客 .NET桌面程序集成Web网页开发的十种解决方案 .NET混合开发解决方案1 WebView2简介 .NE ...
- .NET混合开发解决方案15 WebView2控件集成到WinForm程序编译后的文件及结构说明
系列目录 [已更新最新开发文章,点击查看详细] WebView2控件应用详解系列博客 .NET桌面程序集成Web网页开发的十种解决方案 .NET混合开发解决方案1 WebView2简介 .NE ...
- .NET混合开发解决方案9 WebView2控件的导航事件
系列目录 [已更新最新开发文章,点击查看详细] WebView2控件应用详解系列博客 .NET桌面程序集成Web网页开发的十种解决方案 .NET混合开发解决方案1 WebView2简介 .NE ...
- .NET混合开发解决方案8 WinForm程序中通过设置固定版本运行时的BrowserExecutableFolder属性集成WebView2控件
系列目录 [已更新最新开发文章,点击查看详细] 在我的博客<.NET混合开发解决方案7 WinForm程序中通过NuGet管理器引用集成WebView2控件>中介绍了WinForm ...
- .NET混合开发解决方案10 WebView2控件调用网页JS方法
系列目录 [已更新最新开发文章,点击查看详细] WebView2控件应用详解系列博客 .NET桌面程序集成Web网页开发的十种解决方案 .NET混合开发解决方案1 WebView2简介 .NE ...
- .NET混合开发解决方案11 WebView2加载的网页中JS调用C#方法
系列目录 [已更新最新开发文章,点击查看详细] WebView2控件应用详解系列博客 .NET桌面程序集成Web网页开发的十种解决方案 .NET混合开发解决方案1 WebView2简介 .NE ...
- .NET混合开发解决方案12 网页JS调用C#方法访问WinForm或WPF窗体
系列目录 [已更新最新开发文章,点击查看详细] WebView2控件应用详解系列博客 .NET桌面程序集成Web网页开发的十种解决方案 .NET混合开发解决方案1 WebView2简介 .NE ...
随机推荐
- LVS 工作图
一.工作模式 1.NAT模式 -----主要是修改目标IP地址为RS的IP地址.即请求进入负载均衡器时做DNAT,响应出负载均衡器时做SNAT. 工作方式: 1)客户端请求网站,经过路由器到达负载均衡 ...
- GC和GC Tuning
GC和GC Tuning GC的基础知识 什么是垃圾 C语言申请内存:malloc free C++: new delete c/C++ 手动回收内存 Java: new ? 自动内存回收,编程上简单 ...
- IPhoneX网页布局简介
IPhoneX全面屏是十分科技化的,但是由于其圆角和摄像头刘海位置以及操控黑条的存在使得我们需要去对其样式做一些适配,没有X的同学可以开启 Xcode 9 的iPhone X 模拟器作为学习和调试. ...
- canvas绘图API详解
canvas绘图API详解 1.context的状态 矩阵变换属性 当前剪辑区域 context的其他状态属性: strokeStyle, fillStyle, globalAlpha, lineWi ...
- canvas 1px 出现模糊解决方法及原理
关于canvas绘制1像素出现模糊的原因及解决方法 canvas是html5中非常强大的功能,但是在绘制的时候如果出现1像素,例如画一条1像素的线可能出现模糊情况. 一.解决方法 网上比较常见的解决方 ...
- snippet,让你编码效率翻倍
为什么谈到Snippet 今天下午在用vscode做小程序的时候,发现很不方便,因为商店里提供的代码片段极为有限,而且平时几乎每天都需要用到代码片段,所以就在思考他们是怎么做到给别人提供代码的,我可以 ...
- nodeJs入门的第一节课
nodejs是什么? nodejs的架构模式以及优缺点 nodejs异步IO nodejs事件驱动 nodejs单线程 nodejs应用场景 一.nodejs是什么? 1.1nodejs是一个开源的. ...
- 拼写检查-c++
[问题描述] 作为一个新的拼写检查程序开发团队的成员,您将编写一个模块,用已知的所有形式正确的词典来检查给定单词的正确性. 如果字典中没有这个词,那么可以用下列操作中的一个来替换正确的单 ...
- 技术管理进阶——什么Leader值得追随?
原创不易,求分享.求一键三连 Leader眼里的主动性 前几天孙狗下面小A身上发生了一件Case,让他感到很疑惑: 有一个跨部门较多的项目推进不力,于是善于交流的他被临时提拔成项目负责人,但马上令人 ...
- 用户USER_HZ与内核HZ的值
HZ和Jiffies系统定时器timer能够以可编程的方式设定频率,来中断cpu处理器.此频率即hz,为每秒的定时器节拍(tick)数, 对应着内核变量HZ.选择合适的HZ值需要权衡. tick为两个 ...