我有一个带有嵌入式 CEF 浏览器的 Delphi 应用程序,自从我将 CEF 117.1.4 和 Chromium 117.0.5938.92 更新到 CEF 123.0.12 和 Chromium 123.0.6312.107 后,它就停止工作了。
使用 CEF 117,我可以毫无问题地运行应用程序的两个实例,但现在在第二个实例启动时失败:
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';
Application.Initialize;
Application.Title := 'QBrowser';
Application.CreateForm(TMainForm, MainForm);
test := GlobalCEFApp.StartMainProcess;
if test then
Application.Run;
GlobalCEFApp.Free;
GlobalCEFApp := nil;
end.
GlobalCEFApp.StartMainProcess 现在返回 False。
是否有一些我忽略的新配置值?
CEF 更改了其初始化方式,现在它会检查另一个应用程序是否正在使用相同的 RootCache 设置运行。此功能已在 CEF 120.1.8 中添加
如果 GlobalCEFApp.Cache 和 GlobalCEFApp.RootCache 为空,则将使用默认的特定于平台的目录。对于 Windows,AppData\Local\CEF\User Data。
不建议在生产应用程序中使用默认目录。多个应用程序实例写入同一 GlobalCEFApp.RootCache 目录可能会导致数据损坏。
有两种方法可以避免这种情况:
阅读有关 GlobalCEFApp.OnAlreadyRunningAppRelaunch、GlobalCEFApp.RootCache 和 GlobalCEFApp.Cache 的文档以了解所有详细信息。