1. 程式人生 > >使用C#winform封裝chrome瀏覽器

使用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安裝之後,程式正常執行。就此問題解決。