1. 程式人生 > >使用CefSharp在.Net程序中嵌入Chrome瀏覽器(十)——獨立文件夾部署

使用CefSharp在.Net程序中嵌入Chrome瀏覽器(十)——獨立文件夾部署

enable class 調試 getenv variable server 文件夾 consola href

原文:使用CefSharp在.Net程序中嵌入Chrome瀏覽器(十)——獨立文件夾部署

CefSharp本身攜帶了一大堆文件,這些文件默認直接釋放在exe文件底下,這種方式本身沒有什麽問題,但多了一大堆文件後不是很好看。本文這裏就介紹一個方法,使得可以將CEF相關的文件部署到獨立的文件夾。

在開始改造之前,還是得另外新建一個工程安裝一次CEFSharp,這樣才能獲取到相關資源文件。然後從這些資源文件中分離出來。

首先把CEF進程相關的文件拷貝到一個獨立的文件夾:

  技術分享圖片

  技術分享圖片

然後我們的程序中只需要引用CEFSharp相關的.net代碼的dll,主要有如下幾個:

  技術分享圖片

修改主代碼的配置,主要包括如下幾個部分:

  1. 修改PATH環境變量,使得可以從cef文件夾中加載dll。

    var path = Environment.GetEnvironmentVariable("PATH");
    Environment.SetEnvironmentVariable("PATH", path + ";" + cef_root);

  1. 修改CEFSetting的BrowserSubprocessPath,ResourcesDirPath,LocalesDirPath,使得從獨立的cef文件夾中加載數據。

    var settings = new CefSettings()
    {
    CefCommandLineArgs =
    {
    {"proxy-auto-detect", "0"},
    {"no-proxy-server", "1"},
    },

    BrowserSubprocessPath = $@"{cef_root

    }\CefSharp.BrowserSubprocess.exe",
    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
    }\Cache",
    };

  2. 修改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瀏覽器(十)——獨立文件夾部署