提问人:Justin W. 提问时间:11/1/2023 最后编辑:Justin W. 更新时间:11/7/2023 访问量:65
DotNetBrowser - 从 V1 升级到 V2 时出现异常
DotNetBrowser - Exceptions when Upgrading from V1 to V2
问:
我最近开始从 TeamDev 的 DotNetBrowser 的 V1 版本迁移,我遇到了多个困扰我的问题。
以前,所有 Chromium 二进制文件都可以很好地协同工作,并内置到 NuGet 包中。主要的缺点是启动我的应用程序的多个实例导致用户目录被重用,所以我在几年前就解决了这个问题。
早在 2020 年,我就收到了 V2 的新许可证密钥,所以我想我终于可以开始升级了,因为现在有很多新东西可以使用。在提出这个问题时,我升级到了最新版本 2.24.1。
我仔细检查并彻底检查了 Javascript 调用/执行的所有转换以使用新的方式,但到目前为止,最大的障碍是让引擎工作。
在调试中,处理新的 EngineFactory.Create 调用需要几分钟时间。似乎大多数时候可能是由于下载或提取Chromium dll。一半的时间返回“RPC 调用超时”,另一半的时间返回消息“无法执行此操作,因为对象已被释放”。当它在多次重试后确实工作时,它最终会创建一个 IEngine,但是当尝试直接创建 IProfile 或 IBrowser 时,它也会遇到“无法执行此操作,因为与 Chromium 的连接已关闭”的异常。
下面是构造函数中调用的有问题的代码片段:
string base_data_directory = @"C:\test";
string chromium_directory = base_data_directory + @"\chromium_dir";
EngineOptions engineOptions = new EngineOptions.Builder
{
ChromiumDirectory = base_data_directory,
CrashDumpDirectory = chromium_directory + @"\CrashDump\",
UserDataDirectory = chromium_directory + @"\User\",
SandboxDisabled = true
}.Build();
IEngine engine = EngineFactory.Create(engineOptions);
我没有运行任何其他实例,并且在异常发生之前,初始化时间始终是几分钟。
经过一番挖掘,我在他们的一个常见问题解答中读到,他们的许可证仅对许可证有效时发布的版本有效。虽然我没有收到任何与许可证相关的异常,但我想我会尝试回滚,所以我删除了新的 NuGet 包并安装了 2.1.1,这是我的许可证范围内发生的最后一个版本。
例外情况确实发生了变化,但更改为“无法找到或恢复兼容的 Chromium 二进制文件。在程序集中找不到兼容的二进制文件“,并且通过 NuGet 挖掘,他们似乎没有公开发布的 2.1.1 版 Chromium 包。
还有其他人遇到过这个问题吗?我想最终获得一个新的许可证密钥,但是如果启动时间(这是不可接受的时间增加)和创建时引擎的随机 RPC/处置问题,我可能会回到版本 1。
编辑 2023.11.03: 我附上了每个 Anna 生成的日志的主要部分(非常感谢!
2023-11-03T15:51:20.8094415-07:00 Information IPC - Current platform: WindowsX64 []
2023-11-03T15:51:20.8094415-07:00 Information IPC - .NET version: 4.0.30319.42000 []
2023-11-03T15:51:21.0369928-07:00 Information IPC - Assembly version: 2.24.1.3989 []
2023-11-03T15:51:21.0369928-07:00 Information IPC - Binaries version: 2.24.1.902 []
2023-11-03T15:51:21.1463823-07:00 Warning Process - [41092:21456:1103/155121.145:WARNING:chrome_main_delegate.cc(615)] This is Chrome version 118.0.5993.70 (not a warning) []
2023-11-03T15:51:21.1880668-07:00 Warning Process - [41092:21456:1103/155121.148:WARNING:policy_logger.cc(148)] :components\enterprise\browser\controller\chrome_browser_cloud_management_controller.cc(88) Could not create policy manager as CBCM is not enabled. []
2023-11-03T15:51:21.1920502-07:00 Information IPC - Accepting incoming connection... []
2023-11-03T15:51:21.3384778-07:00 Information IPC - Shared memory created. Memory id: 8ba7a88c-3470-4055-b153-8b7829fc9fee []
2023-11-03T15:51:21.3404718-07:00 Information IPC - Accepting incoming connection: Browser, ConnectionId{Uuid: 8ba7a88c-3470-4055-b153-8b7829fc9fee; } []
2023-11-03T15:51:21.3474548-07:00 Information IPC - Accepting socket connections []
2023-11-03T15:51:21.3494490-07:00 Information IPC - Socket connection checker started [SocketConnectionChecker: Connection Browser,ConnectionId{Uuid: 8ba7a88c-3470-4055-b153-8b7829fc9fee; } [Writer : 8ba7a88c-3470-4055-b153-8b7829fc9fee]]
2023-11-03T15:51:21.3594229-07:00 Warning Process - [41092:21456:1103/155121.353:WARNING:pref_notifier_impl.cc(41)] Pref observer for browser.relaunch_window found at shutdown. []
2023-11-03T15:51:21.3594229-07:00 Warning Process - [41092:21456:1103/155121.353:WARNING:pref_notifier_impl.cc(41)] Pref observer for browser.relaunch_notification_period found at shutdown. []
2023-11-03T15:51:21.3614186-07:00 Information IPC - System.IO.IOException: Unable to read data from the transport connection: An existing connection was forcibly closed by the remote host. ---> System.Net.Sockets.SocketException: An existing connection was forcibly closed by the remote host
at System.Net.Sockets.NetworkStream.Read(Byte[] buffer, Int32 offset, Int32 size)
--- End of inner exception stack trace ---
at System.Net.Sockets.NetworkStream.Read(Byte[] buffer, Int32 offset, Int32 size)
at System.IO.StreamReader.ReadBuffer()
at System.IO.StreamReader.ReadToEnd()
at DotNetBrowser.Internals.Ipc.Connections.ConnectionChecker.Run() [SocketConnectionChecker: Connection Browser,ConnectionId{Uuid: 8ba7a88c-3470-4055-b153-8b7829fc9fee; } [Writer : 8ba7a88c-3470-4055-b153-8b7829fc9fee]]
2023-11-03T15:51:21.3614186-07:00 Information IPC - Connection socket closed [SocketConnectionChecker: Connection Browser,ConnectionId{Uuid: 8ba7a88c-3470-4055-b153-8b7829fc9fee; } [Writer : 8ba7a88c-3470-4055-b153-8b7829fc9fee]]
2023-11-03T15:51:21.3614186-07:00 Information License - One or more product licenses were located []
2023-11-03T15:53:28.0658298-07:00 Information Process - Chromium process exit code 00000026 []
2023-11-03T15:53:28.0658298-07:00 Information IPC - Stopping server... []
2023-11-03T15:53:28.0668290-07:00 Information IPC - Server stopped. []
2023-11-03T15:53:28.0668290-07:00 Information IPC - Stopping server... [OK] []
2023-11-03T15:53:28.1072106-07:00 Error IPC - Failed to send RPC request: rpc.EngineFactory.ApplyLicense.
根据该信息,在应用许可证时,它似乎正在调用并失败。
编辑 11/6/2023:
似乎不仅仅是用户数据目录导致了这个问题,还有故障转储和 Chromium 目录。 我在 Windows 11 PC 上没有遇到这个问题,但我的 Windows 10 PC 对我非常生气。
我最终通过每个关联目录上的以下内容解决了这个问题:
private DirectoryInfo MakeDirectoryAndUpdateSecuritySettings(string directory)
{
DirectoryInfo dir = Directory.CreateDirectory(directory);
dir.Attributes &= ~FileAttributes.ReadOnly;
DirectorySecurity security = dir.GetAccessControl();
SecurityIdentifier everyone = new SecurityIdentifier(WellKnownSidType.WorldSid, null);
security.AddAccessRule(new FileSystemAccessRule(everyone, FileSystemRights.FullControl, InheritanceFlags.ObjectInherit | InheritanceFlags.ContainerInherit, PropagationFlags.InheritOnly, AccessControlType.Allow));
dir.SetAccessControl(security);
return dir;
}
再次感谢安娜和卡特琳娜!
答: 暂无答案
评论
EngineFactory.Create()