如何在win7同样支持Webview2 在 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:https://developer.microsoft.com/zh-CN/microsoft-edge/webview2/#download

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

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

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

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.bing.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的系统中,是可以运行的,如果报错,请参考第四点进行检查项目

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值