如何在win7同样支持Webview2 在 WPF 中使用本地 Webview2 ,如何不依赖系统 Runtime

06-01 1096阅读

项目运行环境:

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

    如何在win7同样支持Webview2 在 WPF 中使用本地 Webview2 ,如何不依赖系统 Runtime

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

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

    如何在win7同样支持Webview2 在 WPF 中使用本地 Webview2 ,如何不依赖系统 Runtime

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

    创建.Net Framework 4.5.2 WPF 项目,将解压的Webview2 复制到项目中,如下图所示:如何在win7同样支持Webview2 在 WPF 中使用本地 Webview2 ,如何不依赖系统 Runtime

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

    将 WebView2 文件夹中所有文件

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

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

    如下图所示:

    如何在win7同样支持Webview2 在 WPF 中使用本地 Webview2 ,如何不依赖系统 Runtime

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

      如何在win7同样支持Webview2 在 WPF 中使用本地 Webview2 ,如何不依赖系统 Runtime

免责声明:我们致力于保护作者版权,注重分享,被刊用文章因无法核实真实出处,未能及时与作者取得联系,或有版权异议的,请联系管理员,我们会立即处理! 部分文章是来自自研大数据AI进行生成,内容摘自(百度百科,百度知道,头条百科,中国民法典,刑法,牛津词典,新华词典,汉语词典,国家院校,科普平台)等数据,内容仅供学习参考,不准确地方联系删除处理! 图片声明:本站部分配图来自人工智能系统AI生成,觅知网授权图片,PxHere摄影无版权图库和百度,360,搜狗等多加搜索引擎自动关键词搜索配图,如有侵权的图片,请第一时间联系我们。

相关阅读

目录[+]

取消
微信二维码
微信二维码
支付宝二维码