CEF4Delphi应用程序无法运行两个实例

问题描述 投票:0回答:1

我有一个带有嵌入式 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。

是否有一些我忽略的新配置值?

delphi delphi-7 chromium-embedded cef4delphi
1个回答
0
投票

CEF 更改了其初始化方式,现在它会检查另一个应用程序是否正在使用相同的 RootCache 设置运行。此功能已在 CEF 120.1.8 中添加

如果 GlobalCEFApp.Cache 和 GlobalCEFApp.RootCache 为空,则将使用默认的特定于平台的目录。对于 Windows,AppData\Local\CEF\User Data

不建议在生产应用程序中使用默认目录。多个应用程序实例写入同一 GlobalCEFApp.RootCache 目录可能会导致数据损坏。

有两种方法可以避免这种情况:

  1. 实现 GlobalCEFApp.OnAlreadyRunningAppRelaunch 以在新应用程序实例启动时收到通知,并使用 Web 浏览器打开新选项卡或子表单。
  2. 为每个应用程序实例使用不同的 GlobalCEFApp.RootCache 目录。

阅读有关 GlobalCEFApp.OnAlreadyRunningAppRelaunch、GlobalCEFApp.RootCache 和 GlobalCEFApp.Cache 的文档以了解所有详细信息。

© www.soinside.com 2019 - 2024. All rights reserved.