.NET混合开发解决方案5 WebView2运行时与分发应用
WebView2控件应用详解系列博客
发布使用Microsoft Edge WebView2的应用程序时,客户端计算机上需要安装WebView2运行时,可以安装自动更新的Evergreen运行时,也可以安装固定版本的。
WebView2 运行时是可再发行运行时,充当 WebView2 应用的基础 (或 支持) Web 平台。 此概念类似于 Visual C++ 或适用于 C++/.NET 应用的 .NET 运行时。 WebView2 运行时包含已修改的Microsoft Edge二进制文件,这些二进制文件针对 WebView2 应用进行了微调和测试。 安装 WebView2 运行时后,它不会显示为用户可见的浏览器应用。 例如,用户在 “开始” 菜单中没有浏览器桌面快捷方式或条目。
可通过两种不同的方式将 WebView2 运行时分发和更新到客户端计算机:常青分发模式和固定版本分发模式。
下载地址:https://developer.microsoft.com/zh-CN/microsoft-edge/webview2/#download-section
在长青分发模式下,WebView2运行时不随应用打包,而是最初使用在线引导程序或离线安装程序安装到客户端。之后,WebView2运行时会在客户端机器上自动更新。然后,开发者可以从最新的 WebView2 SDK 分发使用最新 WebView2 API 的 WebView2 应用的更新。对于大多数开发人员,建议使用长青分发模式。
- 优点
- 底层web平台(WebView2运行时)会自动更新,无需您付出更多努力。
- 客户端系统上的WebView2运行时需要更少的磁盘空间,因为客户端上的所有WebView2应用程序都共享WebView2运行时。
- 在符合条件的系统上,Microsoft Edge和Evergreen WebView2运行时的二进制文件在同一版本上时会硬链接在一起。这种链接为磁盘占用、内存和性能提供了好处。
- 缺点
- WebView2应用程序无法指定需要特定版本的WebView2运行时。
在固定版本分发模式下,下载特定版本的 WebView2 运行时,并将其与应用包中的 WebView2 应用一起打包。 随应用打包的 WebView2 运行时仅由 WebView2 应用使用,而不由客户端计算机上的任何其他应用使用。
- 优点
- 可以更好地控制WebView2运行时的版本控制。清晰地知道应用程序可以使用哪些WebView2 API,因为开发者可以控制应用程序可以使用哪个版本的WebView2运行时。
- 开发者应用程序不需要测试WebView2是否有最新的API。
- 缺点
- 需要自行管理 WebView2 运行时。 WebView2 运行时不会在客户端上自动更新,因此若要使用最新的 WebView2 API,必须定期将应用与更新的 WebView2 运行时一起更新。
- 如果安装了多个 WebView2 应用,则客户端需要更多磁盘空间。
- 无法使用安装程序安装固定版本运行时。
上图中提供的三种下载方式,全部下载到本地,如下图
①是在客户端计算机上运行的小型常青运行时引导程序,体积仅有1.7M,安装过程中需要联网下载WebView2 真正的运行时程序,下载完成后才执行安装。采用这种模式安装的运行时始终与微软官方的最新版本保持一致。
②是32位的WebView2 Runtime长青版独立安装程序。
③是64位的WebView2 Runtime长青版独立安装程序。
④是固定版本运行时。截止我下载时最新版本为100.0.1185.50。开发者可以选择其他版本使用。下载后解压,将其打包到应用程序中即可使用。
对于大多数应用,建议使用常青分发模式。安装完成后,控制面板查看,版本号与Edge浏览器版本保持一致。但是WebView2运行时是独立的运行环境,不依赖于Edge。
WebView2 的正式发布版 (GA) 或预览版适用于以下编程环境:
- 采用长青版安装程序安装WebView2运行时程序,之后通过通过 Windows Server Update Services (WSUS) 为 WebView2 运行时提供更新服务。建议使用默认更新程序接收 WebView2 Microsoft Edge更新。 应谨慎修改更新和服务路径。
在开发和测试期间,WebView2应用程序可以使用以下任一选项作为支持web平台:
- WebView2运行时通常提供与Microsoft Edge浏览器稳定通道相同的web平台功能和更新节奏。在生产环境中使用WebView2运行时,或者根据用户现在拥有的web平台进行开发和测试。
- 预览 (预览体验成员) Microsoft Edge浏览器频道。 这些Microsoft Edge预览频道是 Beta、Dev 和 Canary。 使用此方法测试应用是否具有前向兼容性,以便知道是否即将发生需要更新应用的重大更改。 请参阅 测试即将推出的 API 和功能。
WebView2应用程序的生产版本只能使用WebView2运行时作为支持web平台,而不能使用Microsoft Edge。
常青分发模式可确保 WebView2 应用正在利用最新的 WebView2 功能和安全更新。 常青分布模式具有以下特征:
-
WebView2 运行时会自动更新,而无需执行任何操作。 它接收Microsoft Edge稳定频道和Microsoft Edge安全更新发行说明中所述的相同Microsoft Edge更新。
-
所有使用常青分发模式的 WebView2 应用都使用常青 WebView2 运行时的共享副本,从而节省磁盘空间。
-
在符合条件的系统上,Microsoft Edge和 Evergreen WebView2 运行时的二进制文件在同一版本中硬链接在一起。 此链接为磁盘占用量、内存和性能提供了好处。
使用 WebView2 运行时的长青分发模式时,WebView2 应用假定客户端具有最新的运行时。 对于客户端上的所有应用,应用不能要求特定版本的 WebView2 运行时。 发布新的 WebView2 SDK 包时,WebView2 运行时的兼容版本已分发给客户端。 因此,WebView2 应用可以使用最新版本的 WebView2 SDK 中的 API。请参阅 了解浏览器版本和 WebView2。
对于具有严格兼容性要求的受约束环境,请考虑使用固定版本分发模式。 固定版本分发模式以前称为自带版本分发模式。
在固定版本分发模式下,开发者可以控制应用程序WebView2运行时的更新时间。下载特定版本的WebView2运行时,然后将其与WebView2应用程序打包。客户端上的WebView2运行时不会自动更新。相反,开发者可以定期更新WebView2运行时,该运行时与更新的应用程序一起打包和分发。固定版本方法不使用WebView2运行时的注册表项。
若要使用固定版本分发模式,请执行以下操作:
1、下载 WebView2 运行时的固定版本作为包。
可在此站点下载最新版本和第二大版本的最修补版本。 保留所需任何版本的存档副本。
2、将下载的文件进行解压缩
3、在应用包中包括所有解压缩的固定版本二进制文件,约368M,这些二进制文件将在应用安装期间部署在目标计算机上。
4、在创建WebView2环境时指示固定版本二进制文件的路径。
-
对于 Win32 C/C++,可以使用 CreateCoreWebView2EnvironmentWithOptions 函数创建环境。
browserExecutableFolder
使用该参数指示包含msedgewebview2.exe
的文件夹的路径。 -
对于 .NET,必须在 WebView2
对于 WinUI,请通过指定已安装的位置并为运行时路径设置环境变量来确保应用有权访问该文件夹。 执行此操作的一种方法是将以下 C# 代码添加到应用Source
属性生效之前指定环境。-
对于 .NET,可以使用以下任一方法来指定环境:在
CreationProperties
元素上WebView2
设置 (WPFWinForms/) 属性。BrowserExecutableFolder
使用 (WPFWinForms /) 类中CoreWebView2CreationProperties
的成员来指示固定版本二进制文件的路径。 -
或者使用
EnsureCoreWebView2Async
(WPFWinForms /) 来指定环境。browserExecutableFolder
使用 CoreWebView2Environment.CreateAsync 中的参数来指示固定版本二进制文件的路径。
-
StorageFolder localFolder = Windows.ApplicationModel.Package.Current.InstalledLocation; String fixedPath = Path.Combine(localFolder.Path, "FixedRuntime\\(version number)"); Debug.WriteLine($"Launch path [{localFolder.Path}]"); Debug.WriteLine($"FixedRuntime path [{fixedPath}]"); Environment.SetEnvironmentVariable("WEBVIEW2_BROWSER_EXECUTABLE_FOLDER", fixedPath);
5、使用应用打包并寄送固定版本二进制文件。 根据需要更新二进制文件。
- 对于 WinUI,这可能包括在代码编辑器中打开项目文件 (
.csproj
) ,然后在项目标记中添加以下代码
<ItemGroup> <Content Include="FixedRuntime\(version number)\\**\*.*"> <CopyToOutputDirectory>PreserveNewest</CopyToOutputDirectory> </Content> </ItemGroup>
bin\**designated architecture**\Release
验证文件夹是否具有匹配的 FixedRuntime\ (版本号) 文件夹,其中包含运行时文件。
WebView2应用程序不允许使用Microsoft Edge的稳定频道作为支持web平台。此限制可防止WebView2应用程序的生产版本依赖于浏览器。WebView2应用程序在生产过程中不能依赖浏览器,原因如下:
-
Microsoft Edge不能保证存在于所有用户设备上。 企业和教育部门的许多设备都与Windows Update断开连接,或者不受 Microsoft 直接管理。 此类设备可能未安装Microsoft Edge。 要求 WebView2 应用的生产版本使用 WebView2 运行时而不是Microsoft Edge避免使Microsoft Edge成为运行 WebView2 应用的先决条件。
-
浏览器和应用有不同的用例。 如果 WebView2 应用需要客户端上存在Microsoft Edge,则可能会对 WebView2 应用产生意外的副作用。 例如,IT 管理员可以阻止从特定版本更新浏览器,以使浏览器与内部网站兼容。 要求 WebView2 应用的生产版本使用 WebView2 运行时而不是浏览器,即使客户端管理员阻止了浏览器更新,WebView2 应用也可保持常青。
-
与浏览器不同,WebView2 运行时是针对应用方案开发和测试的,在某些情况下,WebView2 运行时可能包含浏览器中尚不可用的 bug 修复。
长青版 WebView2 运行时将作为Windows 11操作系统的一部分包含在内。
在Windows 11之前,各种 WebView2 应用已在具有操作系统的设备上安装了长青版运行时。 但是,某些设备可能未预安装运行时,因此最好检查客户端上是否存在运行时。
在应用创建 WebView2 之前,应用应通过检查注册表项或调用 API 来检查 WebView2 运行时是否存在,并在缺少运行时时安装它。 在安装或更新应用 (建议的) 或应用运行时,应用可以执行此检查。
成在管理,败在经验;嬴在选择,输在不学! 贵在坚持!
个人作品
BIMFace.SDK.NET
开源地址:https://gitee.com/NAlps/BIMFace.SDK
系列博客:https://www.cnblogs.com/SavionZhang/p/11424431.html
系列视频:https://www.cnblogs.com/SavionZhang/p/14258393.html
技术栈
1、Visual Studio、.NET Core/.NET、MVC、Web API、RESTful API、gRPC、SignalR、Java、Python
2、jQuery、Vue.js、Bootstrap、ElementUI
3、数据库:分库分表、读写分离、SQLServer、MySQL、PostgreSQL、Redis、MongoDB、ElasticSearch、达梦DM
4、架构:DDD、ABP、SpringBoot、jFinal
5、环境:跨平台、Windows、Linux、Nginx
6、移动App:Android、IOS、HarmonyOS、微信小程序、钉钉、uni-app、MAUI
分布式、高并发、云原生、微服务、Docker、CI/CD、DevOps、K8S;Dapr、RabbitMQ、Kafka、RPC、Elasticsearch。
欢迎关注作者头条号 张传宁IT讲堂,获取更多IT文章、视频等优质内容。
出处:www.cnblogs.com/SavionZhang
作者:张传宁 技术顾问、培训讲师、微软MCP、系统架构设计师、系统集成项目管理工程师、科技部创新工程师。
专注于企业级通用开发平台、工作流引擎、自动化项目(代码)生成器、SOA 、DDD、 云原生(Docker、微服务、DevOps、CI/CD);PDF、CAD、BIM 审图等研究与应用。
多次参与电子政务、图书教育、生产制造等企业级大型项目研发与管理工作。
熟悉中小企业软件开发过程:可行调研、需求分析、架构设计、编码测试、实施部署、项目管理。通过技术与管理帮助中小企业实现互联网转型升级全流程解决方案。
本文版权归作者和博客园共有,欢迎转载,但未经作者同意必须保留此段声明,且在文章页面明显位置给出原文连接,否则保留追究法律责任的权利。
如有问题,可以通过邮件905442693@qq.com联系。共同交流、互相学习。
如果您觉得文章对您有帮助,请点击文章右下角【推荐】。您的鼓励是作者持续创作的最大动力!