根据https://docs.microsoft.com/de-de/microsoft-edge/webview2/reference/win32/webview2-idl?view=webview2-1.0.818.41上的文档,可以使用以下注册表项设置用户数据文件夹
[{Root}]\Software\Policies\Microsoft\Edge\WebView2\UserDataFolder
"{AppId}"=""
我不明白在这种情况下AppId是什么意思?这是否意味着该设置是特定于特定应用程序的,还是可以为每个注册的应用程序设置不同的用户数据文件夹?
在相应的环境变量中没有与此对应的内容,该环境变量强制计算机上的所有WebView2实例使用单个共享文件夹:
WEBVIEW2_USER_DATA_FOLDER
我们的应用程序使用通过CoreWebView2Environment.CreateAsync设置的特定用户数据文件夹,但是如果其他人设置了WEBVIEW2_USER_DATA_FOLDER环境变量,这个文件夹就会被覆盖。它强制所有实例使用环境变量中定义的共享文件夹。
因为我们的应用程序依赖于拥有单独的文件夹,所以我们检测是否设置了环境变量,并显示一条消息或处理它。如果用户文件夹是在注册表中设置的,我们也想做同样的事情,但我们不了解如何做到这一点。
发布于 2021-06-03 02:01:37
global documentation描述了加载器覆盖注册表项路径:
[{Root}]\Software\Policies\Microsoft\Edge\WebView2\UserDataFolder "{AppId}"=""
然后稍微往下看Root和AppId是什么:
首先以HKLM身份验证,然后以HKCU身份验证。首先将AppId设置为进程的应用程序用户模型ID,如果没有相应的注册表项,则将AppId设置为进程的编译代码名称,或者如果该名称不是注册表项,则设置为*。
这意味着:
ExampleApp.exe
.*
的情况下重试。这对于将加载器覆盖应用于所有applications.非常有用
覆盖注册表项和环境变量的目的是使开发人员可以更轻松地调试和开发使用WebView2的应用程序,并使系统管理员可以强制使用特定的WebView2运行时版本。它不是为用户设计的,尽管这是可能的。如果用户或系统管理员确实通过加载器覆盖设置了用户数据文件夹,并将其应用于他们系统上的所有应用程序,他们很可能会使用WebView2破坏应用程序,而不仅仅是您的应用程序,我不认为这是您应该解决的问题。
Sharing user data folders是可能的,但只有在主机应用程序在编写时考虑到共享的情况下才能正常工作。Chromium的设计使得每个用户数据文件夹只能有一个浏览器进程。如果多个应用程序尝试使用相同的用户数据文件夹,它们将需要共享相同的浏览器进程。如果应用程序具有不同的WebView2运行时版本要求,或者为浏览器进程指定不同的命令行参数,则它们将无法共享浏览器进程,并且首先启动WebView2的应用程序将获胜,其余应用程序将无法创建其WebView2。
https://stackoverflow.com/questions/67801230
复制相似问题