首页 > 其他分享 >在WPF中使用本地Webview2,不依赖系统runtime

在WPF中使用本地Webview2,不依赖系统runtime

时间:2024-02-22 10:33:05浏览次数:21  
标签:OnContentRendered 文件 项目 Webview2 WebView2 Source WPF runtime

在WPF中使用本地Webview2,不依赖系统runtime

项目运行环境:

  • .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

下载下来的文件为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 partial class MainWindow : Window
    {
      public string Url { get; set; } = "https://www.baidu.com";
      public MainWindow()
      {
          InitializeComponent();
      }

      protected override async void OnContentRendered(EventArgs e)
      {
          base.OnContentRendered(e);

          await webView.EnsureCoreWebView2Async(
              await CoreWebView2Environment.CreateAsync(Path.Combine(AppDomain.CurrentDomain.BaseDirectory;, "WebView2")));
          webView.Source = new Uri(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​ 属性是在 最后才指定的

      protected override async void OnContentRendered(EventArgs e)
      {
          base.OnContentRendered(e);
    
          await webView.EnsureCoreWebView2Async(
              await CoreWebView2Environment.CreateAsync(Path.Combine(AppDomain.CurrentDomain.BaseDirectory;, "WebView2")));
          webView.Source = new Uri(Url);//最后才指定的Source
      }
    

5、运行

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

标签:OnContentRendered,文件,项目,Webview2,WebView2,Source,WPF,runtime
From: https://www.cnblogs.com/ganbei/p/18026779

相关文章

  • 在WPF的RichTextBox富文本中加入一个可点击的按钮
    <RichTextBox><local:MyFlowDocument><Paragraph><InlineUIContainer><ButtonContent="ClickMe!"Click="Button_Click"/>......
  • windows server 2019/2022安装WSUS更新服务器配置System.Runtime.InteropServices.COM
    现象: 2024-02-1814:41:10Postinstallstarted2024-02-1814:41:10Detectedroleservices:Api,UI,WidDatabase,Services2024-02-1814:41:10Start:LoadSettingsFromXml2024-02-1814:41:10Start:GetConfigValuewithfilename=UpdateServices-Services.xmlit......
  • c#使用webView2 访问本地静态html资源跨域问题 || Cors
    背景在浏览器中访问本地静态资源html网页时,可能会遇到跨域问题如图。 是因为浏览器默认启用了同源策略,即只允许加载与当前网页具有相同源(协议、域名和端口)的内容。WebView2默认情况下启用了浏览器的同源策略,即只允许加载与主机相同源的内容。所以如果我们把静态资源发布到ii......
  • c# WPF 布局控件
    c#WPF布局控件风雨飘潇有鼻子有眼,普通路人一个 3人赞同了该文章一、概论WPF是继MFC和Winform后,下一代Windows桌面应用程序的技术。其核心是一个与分辨率无关并且基于向量的程序引擎,以在现代图形硬件的优势下,实现更优质的用户客户端软......
  • 关于java代码Runtime.getRuntime().exec()执行shell脚本中的坑
    java操作shell脚本执行docker命令  Runtime.getRuntime().exec()是不能执行特殊符号如">"、"|"等必须通过"/bin/sh""-c"处理。另外java操作docker 不能分配  dockerexec-i(不要t).另外如果不确定脚本是否执行成功,可以通过waitFor返回的int结果,如果为0脚本执行......
  • electron delphi winform wpf qt的对比
    Electron、Delphi、WinForms、WPF和Qt都是用于开发桌面应用程序的工具或框架,它们各自有一些独特的优点和适用场景。以下是对这些工具的简要对比:Electron:基于Web技术(HTML、CSS和JavaScript)的跨平台桌面应用程序开发框架。使用Chromium渲染引擎提供强大的页面渲染能力。适用......
  • 【开工大吉】推荐4款开源、美观的WPF UI组件库
    思维导航前言WPF介绍HandyControlPanuon.WPF.UIAduSkinLayui-WPF优秀项目和框架精选DotNetGuide技术社区交流群前言经常有小伙伴在技术群里提问:WPF有什么好用的UI组件库?,今天大姚给大家推荐4款开源、美观的WPFUI组件库。WPF介绍WPF是一个强大的桌面应用程序......
  • 【开工大吉】推荐4款开源、美观的WPF UI组件库
    前言经常有小伙伴在技术群里提问:WPF有什么好用的UI组件库?,今天大姚给大家推荐4款开源、美观的WPFUI组件库。WPF介绍WPF是一个强大的桌面应用程序框架,用于构建具有丰富用户界面的Windows应用。它提供了灵活的布局、数据绑定、样式和模板、动画效果等功能,让开发者可以创建出......
  • 【WPF】Xaml调用.resx资源文件,多语言翻译
    参考文章:https://blog.csdn.net/u010839204/article/details/103932044本文在该文章的基础上进行了“改进” 这个是基类库,基本处理均在基类库里面完成。须注意StringResources.resx名字和StringResourcesExtension前部分名字须保持一致。类 StringResourcesExtension:nam......
  • WPF新境界:MVVM设计模式解析与实战,构建清晰可维护的用户界面
     概述:MVVM是一种在WPF开发中广泛应用的设计模式,通过将应用程序分为模型、视图、和视图模型,实现了解耦、提高可维护性的目标。典型应用示例展示了如何通过XAML、ViewModel和数据绑定创建清晰、可测试的用户界面。什么是MVVM?MVVM(Model-View-ViewModel)是一种用于构建用户界面的......