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.
相关产品推荐
相关产品推荐

