无障碍 关怀版

在 WPF 中使用本地 Webview2 ,如何不依赖系统 Runtime

在 WPF 中使用本地 Webview2 ,如何不依赖系统 Runtime

在 WPF 中使用本地 Webview2 ,如何不依赖系统 Runtime

作者:WPFDevelopersOrg - ArcherSong

在 WPF 中使用本地 Webview2 ,如何不依赖系统 Runtime

作者:WPFDevelopersOrg - ArcherSong

项目运行环境:

  • .Net Framework 4.5.2

  • Windows 7 x64 Service Pack 1

  • WebView2 Microsoft.WebView2.FixedVersionRuntime.120.0.2210.91.x64

.Net Framework 4.5.2

Windows 7 x64 Service Pack 1

WebView2 Microsoft.WebView2.FixedVersionRuntime.120.0.2210.91.x64

考虑到很多老项目,本项目使用的是.Net Framework 4.5.2,.Net 更高版本的其实也是可以支持的。

1、下载 WebView2 固定版本 Runtime

首先下载自己想要的固定版本的 WebView2 Runtime[1]

下载下来的文件为 Cab 格式的文件,此文件为压缩文件

将其解压,可得到如下的目录

\MICROSOFT.WEBVIEW2.FIXEDVERSIONRUNTIME.120.0.2210.91.X64

├─EBWebView

│ ├─x64

│ └─x86

├─edge_feedback

├─Extensions

├─Locales

├─MEIPreload

├─Notifications

├─PdfPreview

├─Trust Protection Lists

│ ├─Mu

│ └─Sigma

└─WidevineCdm

└─_platform_specific

└─win_x64

2、创建项目,将Webview2 复制到项目中

创建.Net Framework 4.5.2 WPF 项目,将解压的Webview2 复制到项目中,如下图所示:

文件夹 WebView2 中就是cap文件解压后的二进制文件以及文件夹

将 WebView2 文件夹中所有文件

属性 - 高级 - 复制到输入目录 设置为 如果较新则复制

属性 - 高级 - 生成操作 设置为 无

如下图所示:

3、在项目的 MainWindow 后台代码中写逻辑

在MainWindow.cs 文件中添加代码

Public partialclassMainWindow: Window

{

publicstringUrl { get; set; } = "https://www.bing.com";

publicMainWindow()

{

InitializeComponent;

}

protectedoverrideasyncvoidOnContentRendered(EventArgs e)

{

base.OnContentRendered(e);

awaitwebView.EnsureCoreWebView2Async(

awaitCoreWebView2Environment.CreateAsync(Path.Combine(AppDomain.CurrentDomain.BaseDirectory;, "WebView2")));

webView.Source = newUri(Url);

}

}

添加后,即可在无 WebView2 Runtime 的系统中运行

4、一些问题

项目运行时,有些问题可能会出现,

  • 报错 Microsoft.Web.WebView2.Core.WebView2RuntimeNotFoundException:“Couldn't find a compatible Webview2 Runtime installation to host WebViews.” 这个可能是因为wenview2的文件没有设置为 较新则复制 导致的

  • 报错 System.ArgumentException:“WebView2 was already initialized with a different CoreWebView2Environment. Check to see if the Source property was already set or EnsureCoreWebView2Async was previously called with different values. 这个可能是因为在执行 OnContentRendered 方法前,,对CoreWebview2设置了source属性,此时webview2会自动初始化环境,后面不能重复初始化

    去掉source属性(设置属性或者在构造时去掉都可以)

    上面代码可以看到,Source 属性是在 最后才指定的

    protectedoverrideasyncvoidOnContentRendered(EventArgs e)

    {

    base.OnContentRendered(e);

    awaitwebView.EnsureCoreWebView2Async(

    awaitCoreWebView2Environment.CreateAsync(Path.Combine(AppDomain.CurrentDomain.BaseDirectory;, "WebView2")));

    webView.Source = newUri(Url);//最后才指定的Source

    }

报错 Microsoft.Web.WebView2.Core.WebView2RuntimeNotFoundException:“Couldn't find a compatible Webview2 Runtime installation to host WebViews.” 这个可能是因为wenview2的文件没有设置为 较新则复制 导致的

报错 System.ArgumentException:“WebView2 was already initialized with a different CoreWebView2Environment. Check to see if the Source property was already set or EnsureCoreWebView2Async was previously called with different values. 这个可能是因为在执行 OnContentRendered 方法前,,对CoreWebview2设置了source属性,此时webview2会自动初始化环境,后面不能重复初始化

去掉source属性(设置属性或者在构造时去掉都可以)

上面代码可以看到,Source 属性是在 最后才指定的

protectedoverrideasyncvoidOnContentRendered(EventArgs e)

{

base.OnContentRendered(e);

awaitwebView.EnsureCoreWebView2Async(

awaitCoreWebView2Environment.CreateAsync(Path.Combine(AppDomain.CurrentDomain.BaseDirectory;, "WebView2")));

webView.Source = newUri(Url);//最后才指定的Source

}

5、运行

将生成的 Debug 直接拷贝到不存在 Webview2 的系统中,是可以运行的,如果报错,请参考第四点进行检查项目

参考资料

[1]

WebView2 Runtime: https://developer.microsoft.com/zh-CN/microsoft-edge/webview2/#download 返回搜狐,查看更多

责任编辑:

平台声明:该文观点仅代表作者本人,搜狐号系信息发布平台,搜狐仅提供信息存储空间服务。
阅读 ()

玻璃钢生产厂家延边玻璃钢人物雕塑深圳玻璃钢卡通熊猫雕塑公仔摆件贵州户外玻璃钢雕塑制作玻璃钢雕塑材料视频宿迁玻璃钢人物雕塑厂家供应宁波玻璃钢金属雕塑方案商场中厅墙壁美陈句容玻璃钢雕塑设计价位深圳大型商场美陈市场报价玻璃钢海洋雕塑排行榜新郑肖像玻璃钢雕塑耐高温玻璃钢雕塑价格丽水水果玻璃钢雕塑制作沈阳欧式玻璃钢雕塑制作宁波专业玻璃钢雕塑甘肃玻璃钢动物雕塑订做太原景区玻璃钢雕塑肇庆玻璃钢雕塑代理商大型玻璃钢花盆制作过程平湖玻璃钢雕塑服务热线玻璃钢花盆的市场吉林市玻璃钢雕塑商丘玻璃钢人物大型城市雕塑石家庄人物玻璃钢雕塑定制宣城佛像玻璃钢雕塑优势淮北定做玻璃钢雕塑厂家更合校园玻璃钢人物雕塑工艺精湛园林玻璃钢人物雕塑手工制作商场新春美陈打开方式玻璃钢西瓜雕塑找哪家香港通过《维护国家安全条例》两大学生合买彩票中奖一人不认账让美丽中国“从细节出发”19岁小伙救下5人后溺亡 多方发声单亲妈妈陷入热恋 14岁儿子报警汪小菲曝离婚始末遭遇山火的松茸之乡雅江山火三名扑火人员牺牲系谣言何赛飞追着代拍打萧美琴窜访捷克 外交部回应卫健委通报少年有偿捐血浆16次猝死手机成瘾是影响睡眠质量重要因素高校汽车撞人致3死16伤 司机系学生315晚会后胖东来又人满为患了小米汽车超级工厂正式揭幕中国拥有亿元资产的家庭达13.3万户周杰伦一审败诉网易男孩8年未见母亲被告知被遗忘许家印被限制高消费饲养员用铁锨驱打大熊猫被辞退男子被猫抓伤后确诊“猫抓病”特朗普无法缴纳4.54亿美元罚金倪萍分享减重40斤方法联合利华开始重组张家界的山上“长”满了韩国人?张立群任西安交通大学校长杨倩无缘巴黎奥运“重生之我在北大当嫡校长”黑马情侣提车了专访95后高颜值猪保姆考生莫言也上北大硕士复试名单了网友洛杉矶偶遇贾玲专家建议不必谈骨泥色变沉迷短剧的人就像掉进了杀猪盘奥巴马现身唐宁街 黑色着装引猜测七年后宇文玥被薅头发捞上岸事业单位女子向同事水杯投不明物质凯特王妃现身!外出购物视频曝光河南驻马店通报西平中学跳楼事件王树国卸任西安交大校长 师生送别恒大被罚41.75亿到底怎么缴男子被流浪猫绊倒 投喂者赔24万房客欠租失踪 房东直发愁西双版纳热带植物园回应蜉蝣大爆发钱人豪晒法院裁定实锤抄袭外国人感慨凌晨的中国很安全胖东来员工每周单休无小长假白宫:哈马斯三号人物被杀测试车高速逃费 小米:已补缴老人退休金被冒领16年 金额超20万

玻璃钢生产厂家 XML地图 TXT地图 虚拟主机 SEO 网站制作 网站优化