使用C#winform封装chrome浏览器

最近有个项目需要用到高拍仪,高拍仪是第三方厂家生产的产品,我们想将这款产品嵌入我们自己公司的平台系统中,厂家提供的插件SDK的要求有点麻烦, 必须IE7/8/9/11,而实际上虽然客户那边的环境很复杂,代码发布了,在客户那边并不能正常的运行。所以我们决定自己封装一个浏览器,来避免这种版本多样,不兼容的情况。

 上面是厂家的环境要求。

原本打算封装一个IE浏览器的,但是好像winform的webbrowser控件,底层调用的也是本机的IE内核。虽然表面上浏览器被封装了,但是其实内核版本还是由应用所在的实际系统环境来决定的。所以最后决定跳到cefsharp(chrome)上来。

CEF(Chromium Embedded Framework, 嵌入式Chromium框架)是C/C++开发的库
目前 Google Chrome(Google浏览器),Chromium浏览器,Opera等都是基于CEF为核心,Webkit引擎的浏览器。

CEFSharp是用C++/CLI的方式来调用CEF类库的。

首先新建一个winform项目,在项目解决方案中使用nuget包管理系统,为系统添加必要的CefSharp包,最主要是下面两个包,注意在安装项中选择对应的版本,根据我的SDK的要求,我这边选择安装了43版本的CefSharp。

同时在生成=》配置管理器中,将活动解决方案平台改成 x86 (CEF不能自适应 x86 | x64,必须选择一个目标),目标平台也必须和解决方案平台一致。

CefSettings cefSettings = new CefSettings();
cefSettings.CefCommandLineArgs.Add("enable-npapi", "1");
cefSettings.CefCommandLineArgs.Add("enable-media-stream", "1");
Cef.Initialize(cefSettings);

由于在我们的项目中需要使用到外部插件,需要开启npapi的功能,所以我们通过以上代码来使能cefsharp的npapi功能。由于我们的高拍仪还需要调用摄像头,所以也是使能了摄像头调用的配置。

cefSettings.CefCommandLineArgs.Add("enable-media-stream", "1");

但是实际上这个代码好像并没什么用。

至此一个简单浏览器就这么被快速的封装好了。

为了测试项目兼容性,所以拿到了win7 32/64,win10 32/64上运行测试,发现项目无法启动,清一色的报以下错误。

错误日志1:

Application: XXXXX.exe(这是应用程序名称就不用真名了)

Framework Version: v4.0.30319
Description: The process was terminated due to an unhandled exception.
Exception Info: System.IO.FileLoadException
Stack:
   at XXXXX.MainFrm..ctor()
   at XXXXX.Program.Main()

错误日志2:

错误应用程序名称: XXXXX.exe,版本: 1.0.0.0,时间戳: 0x59722183
错误模块名称: KERNELBASE.dll,版本: 6.1.7600.16385,时间戳: 0x4a5bdbdf
异常代码: 0xe0434352
错误偏移量: 0x0000b727
错误进程 ID: 0x1ce0
错误应用程序启动时间: 0x01d302389f209d25
错误应用程序路径: D:\OPC2.0\XXXXX.exe
错误模块路径: C:\windows\syswow64\KERNELBASE.dll
报告 ID: dd19540e-6e2b-11e7-8a73-6c0b84916a41

在windows系统日志中查看错误信息如下。

 起初我还以为是运行环境的问题,是由于我的.net framework环境不一致导致的。所以在有些系统中我又安装了.net framework 4 ,也把有些.net framework的版本降低了,效果还是一样,报同样的错误。最后各种折腾,各种找解决方法,最后在一个网友那里发现了一个小细节,原来cefsharp的相关dll,有些dll的运行环境依赖的是Microsoft visual C++ 2012  Redistributable的环境。所以我又去微软官方下载了Microsoft visual C++ 2012  Redistributable的运行包,我已打包好上传CSDN,在此下载

将vcredist_x64.exe 或者vcredist_x32.exe安装之后,程序正常运行。就此问题解决。

  • 4
    点赞
  • 14
    收藏
    觉得还不错? 一键收藏
  • 2
    评论
VS2022 WinForms 内嵌 Chrome 浏览器的方法如下: 首先,在 VS2022 中创建一个 WinForms 应用程序项目。然后,确保已安装 CefSharp NuGet 包,这是 C# 中一个流行的将 Chrome 内嵌到应用程序中的库。 接下来,打开 MainForm(主窗体)的设计视图。在工具箱中,如果找不到 CefSharp 控件,则可以右键单击工具箱,选择“选择项”,然后在“COM 组件”选项卡中查找并勾选“CefSharp Browser Control”。 现在,可以在工具箱中找到 CefSharp 控件。将一个 CefSharp 控件拖放到 MainForm 的窗体上,将其大小调整为适合窗体的大小。 然后,打开 MainForm 的代码视图。在窗体的构造函数中添加以下代码: ```csharp using CefSharp; using CefSharp.WinForms; public MainForm() { InitializeComponent(); InitializeBrowser(); } private void InitializeBrowser() { CefSettings settings = new CefSettings(); Cef.Initialize(settings); ChromiumWebBrowser browser = new ChromiumWebBrowser("https://www.google.com"); // 要加载的网页地址 browser.Dock = DockStyle.Fill; Controls.Add(browser); } ``` 在此代码中,首先引入了 CefSharpCefSharp.WinForms 命名空间。然后,在窗体的构造函数中调用 InitializeBrowser() 方法来初始化浏览器控件。在 InitializeBrowser() 方法中,创建了一个 CefSettings 对象,并使用 Cef.Initialize(settings) 初始化了 CefSharp。接下来,创建了一个 ChromiumWebBrowser 控件并设置其 Dock 属性为 Fill,以便填充整个窗体。最后,将浏览器控件添加到窗体的控件集合中。 编译并运行该应用程序,将会在 WinForms 窗体中嵌入一个 Chrome 浏览器,并加载指定的网页地址。 请注意,进行这些步骤之前,确保已经采取了适当的授权和遵守了相关法规和政策,以确保合法使用 Chrome 浏览器技术。
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值