You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

CEF4Delphi应用升级至CEF123后无法启动第二个实例求助

CEF 123升级后Delphi应用多实例启动失败的解决方案

你遇到的问题是CEF 123版本对多实例运行的资源隔离要求比117更严格,主要原因是默认配置下多个实例会共享同一缓存/用户数据目录,导致锁冲突,进而让GlobalCEFApp.StartMainProcess返回False。以下是针对性的解决步骤:

1. 为每个实例配置独立的缓存目录

CEF 123加强了对缓存目录的独占性检查,多个实例共享同一目录会触发初始化失败。修改代码,为每个实例生成唯一的缓存路径:

begin
  GlobalCEFApp := TCefApplication.Create;

  InicializaCef;

  // Reducir el número de locales a un mínimo
  GlobalCEFApp.LocalesRequired := 'ca,de,en-GB,en-US,es-419,es,fr,it,pt-BR,pt-PT';
  GlobalCEFApp.SetCurrentDir := True;
  GlobalCEFApp.LocalesDirPath := 'locales';
  
  // 新增:为每个实例设置独立缓存目录
  GlobalCEFApp.CachePath := Format('cache_%d', [GetCurrentProcessId]);
  // 若需要,也可设置独立的用户数据目录
  GlobalCEFApp.UserDataPath := Format('userdata_%d', [GetCurrentProcessId]);

  Application.Initialize;
  Application.Title := 'QBrowser';
  Application.CreateForm(TMainForm, MainForm);
  test := GlobalCEFApp.StartMainProcess;
  if test then
    Application.Run;

  GlobalCEFApp.Free;
  GlobalCEFApp := nil;
end.

2. 排查初始化顺序与冲突配置

  • 检查InicializaCef过程中是否设置了全局唯一的资源(如固定端口、共享内存标识),这类配置会导致第二个实例无法获取资源。
  • 确保所有CEF相关配置(如LocalesDirPath、CachePath)都在StartMainProcess之前完成设置。

3. 开启CEF日志定位具体错误

如果上述修改仍无效,开启CEF日志输出,查看初始化失败的具体原因:

// 在GlobalCEFApp创建后添加日志配置
GlobalCEFApp.LogFile := 'cef_debug.log';
GlobalCEFApp.LogSeverity := LOGSEVERITY_INFO;

启动第二个实例后,查看cef_debug.log中的错误信息,可进一步定位问题(比如权限不足、依赖缺失等)。

内容的提问来源于stack exchange,提问作者Héctor C.

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.22 04:40:03