使用独立的浏览器子进程

《概述》中关于 CEF 多进程架构的章节中已简单的介绍过为何需要使用独立的浏览器子进程,本章节将详细介绍如何使用独立的浏览器子进程。

创建独立的浏览器子进程项目

1. 创建 WinForm 项目

使用默认模板创建一个 WinForm 应用程序项目。此项目的 .NET 框架类型、版本和平台架构需要与您的主进程项目保持一致。例如,您的主进程项目是基于 .NET 6.0 的 x64 平台,那么您的独立浏览器子进程项目也需要基于 .NET 6.0 的 x64 平台。

2. 安装 WinFormium 包

使用 NuGet 包管理器或使用 NuGet 包管理器控制台运行以下命令来安装 WinFormium 包。

浏览器子进程项目不需要安装 WinFormium Runtime 包。

  1. PM> Install-Package NetDimension.NanUI

3. 修改项目文件

删除模板中预置的 Form1.cs 文件以及相关的资源文件。然后按如下示例修改 Program.cs 文件代码。

  1. using WinFormium;
  2. class Program
  3. {
  4. [STAThread]
  5. static void Main(string[] args)
  6. {
  7. ApplicationConfiguration.Initialize();
  8. var builder = WinFormiumApp.CreateBuilder();
  9. var app = builder.Build();
  10. app.RunAsSubprocess();
  11. }
  12. }

在上面的示例代码中,您不需要使用 UseWinFormiumApp 方法,浏览器子进程项目不需要应用程序配置,因为这些配置只应该在主进程中进行。由于没有使用 UseWinFormiumApp 方法,因此您需要手动调用 ApplicationConfiguration.Initialize() 方法来初始化 WinForm 应用程序,这些初始化代码在 .NET Framework 中应该只保留:

  1. Application.EnableVisualStyles();
  2. Application.SetCompatibleTextRenderingDefault(false);

示例代码最后,使用 RunAsSubprocess 方法来启动浏览器子进程。这里与主进程项目有所区别,主进程项目使用 Run 方法来启动应用程序并初始化子进程。

4. 重新定位输出文件路径

您可以手动将编译输出的可执行文件和相关的依赖文件复制到主进程项目的输出文件夹中,但是这样做会导致每次编译都需要手动复制文件,这显然是不方便的。因此,您可以修改项目文件来自动将编译输出的文件复制到主进程项目的输出文件夹以简化这个过程。

当然,您也可以使用 WinFormiumStarup 启动配置类的 ConfigurationChromiumEmbedded 方法中使用 ConfigureSubprocess 方法来配置子进程的输出文件路径,但是这样做会导致子进程的输出文件路径与主进程的输出文件路径不一致,这样会导致子进程无法找到主进程的依赖文件,因此不推荐这样做。

  1. protected override void ConfigurationChromiumEmbedded(ChromiumEnvironmentBuiler cef)
  2. {
  3. cef.ConfigureSubprocess(sub =>
  4. {
  5. sub.SubprocessFilePath = "<Path to subprocess>";
  6. });
  7. }

5. 编译并运行

在完成上述步骤后,您可以编译并运行主进程项目。如果一切正常,任务管理器中应该在主进程的子进程列表中看到一个或多个子进程项目的可执行文件。

任务管理器运行结果

如图所示,WinFormium Example App 是主进程,WinFormium Subprocess App 是本文档中创建的独立浏览器子进程项目。

另请参阅