文章目录
- 问题起因
- 解决方案
- 方案一:增加版本兼容性检查(推荐)
- 方案二:强制用户升级 Runtime
- 方法三:通过控制面板“修复”(适用于已安装但出问题的场景)
问题起因
在现场WPF程序报错,原因是在调用webview2的地方引发错误
报错的核心在于 get_HttpStatusCode() 这个方法。你调用的这个属性需要底层运行时提供 ICoreWebView2NavigationCompletedEventArgs2 接口,但用户电脑上的 WebView2 并不支持它,导致 COM 组件转换失败(E_NOINTERFACE)。
WebView2 的工作模式是 SDK + Runtime。
SDK (开发环境): C# 项目中通过 NuGet 引入的 Microsoft.Web.WebView2 包。它定义了你能调用的 API。
Runtime (运行环境):用户电脑上安装的 Edge 浏览器或独立 Runtime。它负责 API 的具体实现。
这里存在冲突点: 代码中访问了 args.HttpStatusCode,这个属性是在较新版本的 SDK 中引入的。如果用户电脑上的 Runtime 版本低于该属性引入的版本,程序运行到这一行就会崩溃。
解决方案
方案一:增加版本兼容性检查(推荐)
在调用较新的 API 之前,先检查当前运行时的版本是否支持。不要直接访问 HttpStatusCode,改用安全的方式。
// 在 NavigationCompleted 事件回调中 private void WebView_NavigationCompleted(object sender, CoreWebView2NavigationCompletedEventArgs e) { // 不要直接用 e.HttpStatusCode,先尝试获取 // 假设你需要获取状态码,但也要兼顾旧版本环境 int statusCode = 200; // 默认值 try { // 只有 Runtime 支持时才能访问 statusCode = e.HttpStatusCode; } catch (System.NotImplementedException) { // 如果报错,说明 Runtime 太旧,不支持获取 HttpStatusCode // 这里可以根据业务逻辑处理,或者记录日志 } }方案二:强制用户升级 Runtime
如果环境Webview2版本太低,引导用户下载安装最新的 WebView2 Runtime。
Webview2 Runtime : https://developer.microsoft.com/zh-cn/microsoft-edge/webview2/?form=MA13LH
进行下载安装
如果遇到安装失败问题
WIN+R -> regedit 打开注册表
64位
删除残留注册表
HKEY_LOCAL_MACHINE\SOFTWARE\WOW6432Node\Microsoft\EdgeUpdate\Clients\{F3017226-FE2A-4295-8BDF-00C3A9A7E4C5}之后再次运行安装
方法三:通过控制面板“修复”(适用于已安装但出问题的场景)
如果你的电脑里已经显示安装了 WebView2,但依然报错,说明组件可能损坏或自动更新被卡住了。
打开 控制面板 -> 程序和功能(或 Windows 设置里的“安装的应用”)。
在列表中搜索 Microsoft Edge WebView2 Runtime。
右键点击它,选择 更改 (Change)。
在弹出的对话框中点击 修复 (Repair)。
效果:Windows 会强制触发一次在线更新,将其同步到最新版本。