首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >如何在注册表中设置WebView2用户数据文件夹

如何在注册表中设置WebView2用户数据文件夹
EN

Stack Overflow用户
提问于 2021-06-02 16:05:22
回答 1查看 571关注 0票数 0

根据https://docs.microsoft.com/de-de/microsoft-edge/webview2/reference/win32/webview2-idl?view=webview2-1.0.818.41上的文档,可以使用以下注册表项设置用户数据文件夹

代码语言:javascript
运行
复制
[{Root}]\Software\Policies\Microsoft\Edge\WebView2\UserDataFolder
"{AppId}"=""

我不明白在这种情况下AppId是什么意思?这是否意味着该设置是特定于特定应用程序的,还是可以为每个注册的应用程序设置不同的用户数据文件夹?

在相应的环境变量中没有与此对应的内容,该环境变量强制计算机上的所有WebView2实例使用单个共享文件夹:

代码语言:javascript
运行
复制
WEBVIEW2_USER_DATA_FOLDER

我们的应用程序使用通过CoreWebView2Environment.CreateAsync设置的特定用户数据文件夹,但是如果其他人设置了WEBVIEW2_USER_DATA_FOLDER环境变量,这个文件夹就会被覆盖。它强制所有实例使用环境变量中定义的共享文件夹。

因为我们的应用程序依赖于拥有单独的文件夹,所以我们检测是否设置了环境变量,并显示一条消息或处理它。如果用户文件夹是在注册表中设置的,我们也想做同样的事情,但我们不了解如何做到这一点。

EN

回答 1

Stack Overflow用户

发布于 2021-06-03 02:01:37

global documentation描述了加载器覆盖注册表项路径:

[{Root}]\Software\Policies\Microsoft\Edge\WebView2\UserDataFolder "{AppId}"=""

然后稍微往下看Root和AppId是什么:

首先以HKLM身份验证,然后以HKCU身份验证。首先将AppId设置为进程的应用程序用户模型ID,如果没有相应的注册表项,则将AppId设置为进程的编译代码名称,或者如果该名称不是注册表项,则设置为*。

这意味着:

  • 如果您的应用程序设置了应用程序用户模型ID,则WebView2将查找注册表项,并将其用作AppId。
  • 如果找不到该注册表项或应用程序没有应用程序用户模型ID,则使用可执行文件名。因此,如果您的应用程序可执行文件名为ExampleApp.exe,则WebView2将查找AppId设置为ExampleApp.exe.
  • If的注册表项,即未找到注册表路径,然后WebView2将在AppId设置为*的情况下重试。这对于将加载器覆盖应用于所有applications.

非常有用

覆盖注册表项和环境变量的目的是使开发人员可以更轻松地调试和开发使用WebView2的应用程序,并使系统管理员可以强制使用特定的WebView2运行时版本。它不是为用户设计的,尽管这是可能的。如果用户或系统管理员确实通过加载器覆盖设置了用户数据文件夹,并将其应用于他们系统上的所有应用程序,他们很可能会使用WebView2破坏应用程序,而不仅仅是您的应用程序,我不认为这是您应该解决的问题。

Sharing user data folders是可能的,但只有在主机应用程序在编写时考虑到共享的情况下才能正常工作。Chromium的设计使得每个用户数据文件夹只能有一个浏览器进程。如果多个应用程序尝试使用相同的用户数据文件夹,它们将需要共享相同的浏览器进程。如果应用程序具有不同的WebView2运行时版本要求,或者为浏览器进程指定不同的命令行参数,则它们将无法共享浏览器进程,并且首先启动WebView2的应用程序将获胜,其余应用程序将无法创建其WebView2。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/67801230

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档