WPF应用中使用CefSharp打开网页后程序因libcef.dll崩溃
WPF中使用CefSharp打开网页生产环境崩溃问题
问题详情
调试环境下WPF应用通过CefSharp打开网页正常,但生产环境中网页显示几秒后程序崩溃,Windows事件日志指向libcef.dll抛出异常。
相关代码
XAML代码
<Grid> <cefSharp:ChromiumWebBrowser Name="browser" Address="about:blank" HorizontalAlignment="Stretch" VerticalAlignment="Stretch" Width="Auto" Height="Auto"/> </Grid>
C#导航方法
public void Navigate(string url) { browser.Address = url; }
窗口调用代码
BrowserWindows browserWindows = new BrowserWindows(); browserWindows.Navigate(url); browserWindows.Closed += (s, e) => { if (OnWindowClosed != null) { OnWindowClosed(1, true, _paramString, _idperson); } }; browserWindows.Show();
Windows事件日志
Faulting application name: Test.exe, version: 6.0.0.135, time stamp: 0x6707d47d Faulting module name: libcef.dll, version: 129.0.11.0, time stamp: 0x66fb0c5a Exception code: 0x4000001f Error offset: 0x04ea8352 Faulting process ID: 0x0x391C Faulting application start time: 0x0x1DB1BBC15CD5A5C Faulting application path: C:\Program Files (x86)\Test\Test.exe Faulting module path: C:\Program Files (x86)\Test\libcef.dll Report identifier: a1c6a7fb-e83b-4853-b6cc-a1c05b13494c Full name of the faulting package: Application ID relative to the faulting package:
已尝试操作
- 将程序编译为x64架构,问题仍存在。
解决方案
- 确保依赖文件完整部署:生产环境必须包含CefSharp对应的所有依赖文件,包括
libcef.dll、icudtl.dat、locales文件夹、CefSharp.BrowserSubprocess.exe等,注意x86和x64版本不能混合,需与程序编译架构匹配。 - 启用CefSharp日志排查:在应用初始化时开启详细日志,定位崩溃具体原因:
public partial class App : Application { protected override void OnStartup(StartupEventArgs e) { var settings = new CefSettings(); settings.LogSeverity = LogSeverity.Verbose; settings.LogFile = Path.Combine(AppDomain.CurrentDomain.BaseDirectory, "cef_debug.log"); Cef.Initialize(settings); base.OnStartup(e); } protected override void OnExit(ExitEventArgs e) { Cef.Shutdown(); base.OnExit(e); } } - 延迟导航时机:等待ChromiumWebBrowser完成初始化后再执行导航,避免未初始化完成时操作导致崩溃:
// 在BrowserWindows的构造函数中添加 browser.IsBrowserInitializedChanged += (s, e) => { if (browser.IsBrowserInitialized && !string.IsNullOrEmpty(_pendingUrl)) { browser.Address = _pendingUrl; _pendingUrl = null; } }; // 修改Navigate方法 private string _pendingUrl; public void Navigate(string url) { if (browser.IsBrowserInitialized) { browser.Address = url; } else { _pendingUrl = url; } } - 排查网页兼容性:尝试加载静态测试页面(如
https://www.example.com),若不崩溃则说明原网页存在JS或资源加载问题,需排查网页代码是否触发CefSharp的已知bug。 - 更新CefSharp版本:当前使用的129.0.11.0版本可能存在已知崩溃问题,升级至最新稳定版可以修复部分底层bug。
- 检查运行权限:尝试以管理员身份运行生产环境程序,排除权限不足导致的资源访问失败问题。
内容的提问来源于stack exchange,提问作者cpham
相关产品推荐
相关产品推荐

