.NET 4.8 WinForms中已安装WebView2 Runtime仍触发WebView2RuntimeNotFoundException问题排查
遇到这个问题挺常见的,我帮你梳理几个最可能的原因和解决办法:
本地Runtime路径配置错误
你代码里指定了AppDomain.CurrentDomain.BaseDirectory下的"WebView2"文件夹作为Runtime路径,但要确认这个目录里真的放了完整的固定版本WebView2 Runtime文件(不是安装程序,是解压后的整套文件)。如果只是放了安装包或者解压不完整,系统肯定找不到必要的运行文件。可以打开这个目录检查,是否有msedgewebview2.exe这类核心文件。Runtime与NuGet包版本不兼容
WebView2控件的NuGet包版本和你本地的Runtime版本必须匹配。如果你的NuGet包是较新的版本,但本地Runtime是旧版,就会触发兼容性报错。建议要么下载和NuGet包版本一致的Runtime,要么直接让系统自动匹配已安装的Runtime(去掉本地路径参数)。代码强制指定本地路径,忽略了全局安装的Runtime
你当前的代码会优先使用你指定的本地路径里的Runtime,如果这个路径有问题,就算系统已经安装了全局Runtime也不会被调用。如果想使用已安装的全局Runtime,可以修改代码,不指定本地路径:await PowerBi_web.EnsureCoreWebView2Async(await CoreWebView2Environment.CreateAsync(null));这样WebView2会自动检测系统中已安装的兼容Runtime。
32位/64位架构不匹配
如果你程序的目标平台是32位,但安装了64位的WebView2 Runtime(或者反过来),也会导致找不到Runtime。可以在项目属性里检查目标平台,确保和Runtime的架构一致。路径权限问题
如果你的程序运行时没有访问指定"WebView2"目录的权限(比如路径在Program Files这类需要管理员权限的目录下),也会触发文件找不到的错误。可以把Runtime放到程序有权限访问的目录,比如应用程序的私有数据目录,或者给目标目录添加读写权限。
如果你还是不确定,可以先试试去掉本地路径参数的代码,看是否能正常调用全局Runtime,这样能快速排查是路径问题还是其他兼容性问题。
备注:内容来源于stack exchange,提问作者Tom Boudniatski

