使用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}\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",
}; - 修改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浏览器(十)——独立文件夹部署的更多相关文章
- 使用CefSharp在.Net程序中嵌入Chrome浏览器(二)——参数设置
在实现了.Net程序中嵌入Chrome浏览器后,下一步的个性化操作就是加入一些设置了,在前面的文章中,我们可以看到在使用Chrome控件前,有如下一个操作: var setting = new Cef ...
- 使用CefSharp在.Net程序中嵌入Chrome浏览器(一)——简介
有的时候,我们需要在程序中嵌入Web浏览器,其实.Net Framework中本身就提供了WebBrowser控件,本身这个是最简单易用的方案,但不知道是什么原因,这个控件在浏览网页的时候有些莫名的卡 ...
- 使用CefSharp在.Net程序中嵌入Chrome浏览器(九)——性能问题
在使用CEF的过程中,我发现了一个现象:WPF版的CEF比Chrome性能要差:一些有动画的地方会掉帧(例如,CSS动画,全屏图片拖动等),视频播放的效果也没有Chrome流畅. 查了一下相关资料,发 ...
- 使用CefSharp在.Net程序中嵌入Chrome浏览器(六)——调试
chrome强大的调试功能令许多开发者爱不释手,在使用cef的时候,我们也可以继承这强大的开发者工具. 集成调试: 我们可以使用如下函数直接使用集成在chrome里的开发者工具 _chrome.Sho ...
- 使用CefSharp在.Net程序中嵌入Chrome浏览器(四)——启动优化
在实际使用过程中,发现有的客户端会出现chrome加载网页过慢问题,定位后发现很多是因为设置系统代理所致,此时可以通过如下启动参数禁止系统代理. {"proxy-auto-detect&qu ...
- 使用CefSharp在.Net程序中嵌入Chrome浏览器(七)——右键菜单
一个常用的功能就是禁止浏览器本身的右键菜单,靠在WPF中拦截鼠标事件是不行的,可以通过设置MenuHandler来实现. 首先实现一个IContextMenuHandler. public class ...
- 使用CefSharp在.Net程序中嵌入Chrome浏览器(三)——基本操作
CefSharp本身提供了WPF和WinForm两个版本的控件,这两个版本的控件使用方法大同小异,由于我WPF的版本用的较多,这里就简单的介绍下WPF版的CEFSharp控件的用法. 加载页面: Ch ...
- 使用CefSharp在.Net程序中嵌入Chrome浏览器(八)——Cookie
CEF中的Cookie是通过CookieManager来管理的,可以用它来设置发送的Cookie. 发送Cookie 发送Cookie的一个基本示例如下: var cookieManager = _c ...
- 使用CefSharp在.Net程序中嵌入Chrome浏览器(五)——Javascript交互
要在CEF中和网页的JS进行交互,首先我们要通过设置启用Javascrit集成功能. CefSharpSettings.LegacyJavascriptBindingEnabled = true; 调 ...
随机推荐
- TED_Topic10:The case for engineering our food
By Pamela Ronald Pamela Ronald studies the genes that make plants more resistant to disease and stre ...
- 20155328 2016-2017-2 《Java程序设计》 第8周学习总结
20155328 2016-2017-2 <Java程序设计> 第8周学习总结 教材学习内容总结 NIO与NIO2 认识NIO 相对于IO,NIO可以让你设定缓冲区容量,在缓冲区中对感兴趣 ...
- 20155338 2016-2017-2 《Java程序设计》第6周学习总结
20155338 2016-2017-2 <Java程序设计>第6周学习总结 教材学习内容总结 输入和输出 • 串流设计概念 要想活用输入/输出API,一定先要了解Java中如何以串流抽象 ...
- MySQL-数据操作-增删改查
1.增加: insert into 表 (列名,列名...) values (值,值,值...) insert into 表 (列名,列名...) values (值,值,值...),(值,值,值.. ...
- 【Udacity并行计算课程笔记】- lesson 1 The GPU Programming Model
一.传统的提高计算速度的方法 faster clocks (设置更快的时钟) more work over per clock cycle(每个时钟周期做更多的工作) more processors( ...
- umount /mnt/cdrom
这是因为有程序正在访问这个设备,最简单的办法就是让访问该设备的程序退出以后再umount.可能有时候用户搞不清除究竟是什么程序在访问设备,如果用户不急着umount,则可以用: umount -l / ...
- c#按字符串中的数字排序问题
在.net 的framewrok框架中提供的排序方法中,如string.sort() 或ArrayList.Sort()方法.这两个方法对字符串排序时,如果字符串中含有数字,则不会按数字大小排序.如: ...
- Go语言之Windows 10开发工具LiteIDE初步使用
Intel Core i5-8250U,Windows 10家庭中文版,go version go1.11 windows/amd64,LiteIDE X34.1 在RUNOOB.COM的Go语言教程 ...
- SVN服务器搭建和使用-转载
SVN服务器搭建和使用(一)-转载 原文地址:http://www.cnblogs.com/xiaobaihome/archive/2012/03/20/2407610.html Subversion ...
- php 批量导入昨天的数据(别类版的增量备份安案)
$where = ''; $localogLogin = $this->gamedb_model->query_onerow("select `datetime` from lo ...