WebView2多用户启动报错Requested resource is in use(0x800700AA)解决方案问询
问题根因
错误码0x800700AA是WebView2用户数据文件夹被独占锁定的典型报错。WebView2的用户数据目录默认带有进程级独占锁,且仅允许创建该目录的用户身份读写。你当前的代码为所有用户指定了同一个固定的CacheDirectory作为用户数据目录,第一个启动的用户会持有目录锁,其他用户启动时无法获得读写权限,就会抛出该异常。而同一用户启动多个会话时身份匹配,可以正常共享该目录,所以不会报错。
修复方案
核心逻辑为给每个独立用户分配专属的用户数据目录,避免多用户共享同一路径。你可以在原有缓存目录基础上拼接当前系统用户的唯一标识,生成每个用户独立的缓存路径即可。
推荐使用用户SID作为标识(避免用户名重复冲突),示例代码如下:
using System.IO; using System.Security.Principal; using Microsoft.Web.WebView2.Core; // 取当前用户SID作为目录唯一标识 string userUniqueId = WindowsIdentity.GetCurrent().User.Value; string userCacheDir = Path.Combine(CacheDirectory, userUniqueId); // 用用户独立路径创建WebView2环境 var env = await CoreWebView2Environment.CreateAsync(userDataFolder: userCacheDir); await this.EnsureCoreWebView2Async(env);
如果你的场景不存在用户名重复的情况,也可以用更简单的用户名作为标识:
string userUniqueId = Environment.UserName; string userCacheDir = Path.Combine(CacheDirectory, userUniqueId);
注意事项
- 需确保根目录
CacheDirectory对所有访问用户开放读写权限,WebView2会自动创建层级不存在的子目录,无需额外手动创建 - 同一用户启动多个应用会话时共享同一份用户数据目录是WebView2原生支持的,不会出现冲突,符合你当前的使用需求
- 如果需要实现同一用户的多个会话完全隔离,可以在路径中再拼接唯一的会话实例ID,即可实现同用户多实例的目录隔离
内容的提问来源于stack exchange,提问作者Zimo
相关产品推荐
相关产品推荐

