如何在win7同样支持Webview2 在 WPF 中利用当地 Webview2 ,如何不依赖系统 ...

不到断气不罢休  论坛元老 | 2025-2-12 13:01:24 | 来自手机 | 显示全部楼层 | 阅读模式
打印 上一主题 下一主题

主题 1799|帖子 1799|积分 5397

项目运行情况:


  • .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文件中添加代码
  1. Public partial class MainWindow : Window
  2.     {
  3.       public string Url { get; set; } = "https://www.bing.com";
  4.       public MainWindow()
  5.       {
  6.           InitializeComponent();
  7.       }
  8.       protected override async void OnContentRendered(EventArgs e)
  9.       {
  10.           base.OnContentRendered(e);
  11.           await webView.EnsureCoreWebView2Async(
  12.               await CoreWebView2Environment.CreateAsync(Path.Combine(AppDomain.CurrentDomain.BaseDirectory;, "WebView2")));
  13.           webView.Source = new Uri(Url);
  14.       }
  15.    }
复制代码
添加后,即可在无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);
    1.   await webView.EnsureCoreWebView2Async(
    2.       await CoreWebView2Environment.CreateAsync(Path.Combine(AppDomain.CurrentDomain.BaseDirectory;, "WebView2")));
    3.   webView.Source = new Uri(Url);//最后才指定的Source
    复制代码
    }
5、运行

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


免责声明:如果侵犯了您的权益,请联系站长,我们会及时删除侵权内容,谢谢合作!更多信息从访问主页:qidao123.com:ToB企服之家,中国第一个企服评测及商务社交产业平台。

本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有账号?立即注册

x
回复

使用道具 举报

0 个回复

倒序浏览

快速回复

您需要登录后才可以回帖 登录 or 立即注册

本版积分规则

不到断气不罢休

论坛元老
这个人很懒什么都没写!
快速回复 返回顶部 返回列表