使用CefSharp在.Net程序中嵌入Chrome瀏覽器(十)——獨立文件夾部署
CefSharp本身攜帶了一大堆文件,這些文件默認直接釋放在exe文件底下,這種方式本身沒有什麽問題,但多了一大堆文件後不是很好看。本文這裏就介紹一個方法,使得可以將CEF相關的文件部署到獨立的文件夾。
在開始改造之前,還是得另外新建一個工程安裝一次CEFSharp,這樣才能獲取到相關資源文件。然後從這些資源文件中分離出來。
首先把CEF進程相關的文件拷貝到一個獨立的文件夾:
然後我們的程序中只需要引用CEFSharp相關的.net代碼的dll,主要有如下幾個:
修改主代碼的配置,主要包括如下幾個部分:
- 修改PATH環境變量,使得可以從cef文件夾中加載dll。
var path = Environment.GetEnvironmentVariable("PATH");
Environment.SetEnvironmentVariable("PATH", path + ";" + cef_root);
-
修改CEFSetting的BrowserSubprocessPath,ResourcesDirPath,LocalesDirPath,使得從獨立的cef文件夾中加載數據。
var settings = new CefSettings()
{
CefCommandLineArgs =
{
{"proxy-auto-detect", "0"},
{"no-proxy-server", "1"},
},
BrowserSubprocessPath = $@"{cef_root
UserDataPath = $@"{cef_root}\UserData",
ResourcesDirPath = cef_root,
LocalesDirPath = cef_root,
LogSeverity = LogSeverity.Disable,
Locale = "zh-cn",
RemoteDebuggingPort = 33229,
WindowlessRenderingEnabled = true,
IgnoreCertificateErrors = true,
CachePath = $@"{cef_root
}; - 修改Cef.Initialize的performDependencyCheck參數為false,關閉檢查,否則啟動時仍然會檢查當前目錄下是否存在相關文件。
Cef.Initialize(settings, performDependencyCheck: false, browserProcessHandler: null);
另外,如果不能正常啟動,可以在看下調試模式下的output窗口的輸出,一般會有相關提示,如:
[1112/093545.497:FATAL:v8_initializer.cc(185)] Failed to open V8 file ‘F:\dev\cef\natives_blob.bin‘ (reason: -4)
經過這番改造後,我們的程序中只引用cef的.net封裝文件,因此不需要新建一個x86配置工程了。(當然,我們的程序本身仍然不能是any cpu的,必須得是x68或x64)
使用CefSharp在.Net程序中嵌入Chrome瀏覽器(十)——獨立文件夾部署