.NET混合开发解决方案5 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
Source
属性生效之前指定环境。对于 WinUI,请通过指定已安装的位置并为运行时路径设置环境变量来确保应用有权访问该文件夹。 执行此操作的一种方法是将以下 C# 代码添加到应用
对于 .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 运行时是否存在,并在缺少运行时时安装它。 在安装或更新应用 (建议的) 或应用运行时,应用可以执行此检查。
.NET混合开发解决方案5 WebView2运行时与分发应用的更多相关文章
- .NET混合开发解决方案9 WebView2控件的导航事件
系列目录 [已更新最新开发文章,点击查看详细] WebView2控件应用详解系列博客 .NET桌面程序集成Web网页开发的十种解决方案 .NET混合开发解决方案1 WebView2简介 .NE ...
- .NET混合开发解决方案10 WebView2控件调用网页JS方法
系列目录 [已更新最新开发文章,点击查看详细] WebView2控件应用详解系列博客 .NET桌面程序集成Web网页开发的十种解决方案 .NET混合开发解决方案1 WebView2简介 .NE ...
- .NET混合开发解决方案11 WebView2加载的网页中JS调用C#方法
系列目录 [已更新最新开发文章,点击查看详细] 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混合开发解决方案24 WebView2对比CefSharp的超强优势
系列目录 [已更新最新开发文章,点击查看详细] WebView2控件应用详解系列博客 .NET桌面程序集成Web网页开发的十种解决方案 .NET混合开发解决方案1 WebView2简介 .NE ...
- .NET混合开发解决方案13 自定义WebView2中的上下文菜单
系列目录 [已更新最新开发文章,点击查看详细] WebView2控件应用详解系列博客 .NET桌面程序集成Web网页开发的十种解决方案 .NET混合开发解决方案1 WebView2简介 .NE ...
- .NET混合开发解决方案16 管理WebView2的用户数据
系列目录 [已更新最新开发文章,点击查看详细] WebView2控件应用详解系列博客 .NET桌面程序集成Web网页开发的十种解决方案 .NET混合开发解决方案1 WebView2简介 .NE ...
- .NET混合开发解决方案12 网页JS调用C#方法访问WinForm或WPF窗体
系列目录 [已更新最新开发文章,点击查看详细] WebView2控件应用详解系列博客 .NET桌面程序集成Web网页开发的十种解决方案 .NET混合开发解决方案1 WebView2简介 .NE ...
随机推荐
- 随意写文件命令?怎么向屏幕输出带空格的字符串,比如”hello world”?
写文件命令:vi 向屏幕输出带空格的字符串:echo hello world
- spring cloud 断路器的作用是什么?
在分布式架构中,断路器模式的作用也是类似的,当某个服务单元发生故障(类似用电器发生短路)之后,通过断路器的故障监控(类似熔断保险丝),向调用方返回一个错误响应,而不是长时间的等待.这样就不会使得线程因 ...
- 什么是 Daemon 线程?它有什么意义?
所谓后台(daemon)线程,是指在程序运行的时候在后台提供一种通用服务的线 程,并且这个线程并不属于程序中不可或缺的部分.因此,当所有的非后台线程 结束时,程序也就终止了,同时会杀死进程中的所有后台 ...
- 面试问题之C++语言:如何避免内存泄漏?
转载于:https://www.php.cn/csharp-article-416104.html 1.不要手动管理内存,可以尝试在适用的情况下使用智能指针. 2.使用string而不是char*.s ...
- thymeleaf调用静态类
为啥需要调用本地静态方法 Thymeleaf模板里面有时候需要使用本地静态常量,要是每次都在控制层传一遍很麻烦 我们需要在Thymeleaf模板我们使用比如 1代表一年级,2代表二年级,3代表三年级等 ...
- 智能指针中C++重载'->'符号是怎么实现的
例如下面的代码: class StrPtr{ public: StrPtr() : _ptr(nullptr){} //拷贝构造函数等省略... std::string* operator->( ...
- FR9833 32V转5V
- Web最佳实践阅读总结(1)
介绍 最近开始刷一些书和题,此系列是介绍在读Web最佳实践的一些收获和体会. web前端发展现状 存在问题: 代码组织混乱 代码格式的问题突出 页面布局随意 网站整体性能差,没有意识到应用诸如缓存,动 ...
- 关于disabled的事,你用对了吗?
大家都知道disabled属性用来禁用表单里的元素.如果让你来禁用一个表单元素,你会怎么做么,下面提供几种写法,各位看官请看 html: <button type='button'>tes ...
- React 可视化开发工具 Shadow Widget 非正经入门(之六:markdown)
本系列博文从 Shadow Widget 作者的视角,解释该框架的设计要点.本篇讲解 Markdown 在 Shadow Widget 中的应用. Markdown 在 Shadow Widget 中 ...