LeeYzero的博客

自强不息,厚德载物

0%

我们在开发应用程序时,一般会引入一些第三方库,通常情况下,我们是把这些第三方依赖文件放到应用程序所处目录,这样应用程序启动时就能正确找到相关依赖文件。但当依赖文件比较多,我们希望对依赖的文件进行归类,放置到不同的目录下以便管理,这个时候应用程序的manifest就派上用场了。

并行程序集

在介绍应用程序的manifest之前,需要了解一下并行程序集(Side-by-Side Assembly)。什么是并行程序集呢? 并行程序集是微软为了解决DLL Hell问题而提出的一种解决方案,它采用manifest文件扫描组件之间的依赖关系。其工作原理如下图所求:

简单说明一下,微软在未提出Side-by-Side Assembly之前,应用程序启动时按照一定的规则加载DLL。通常情况下,应用程序会采用动态链接方式共享一些操作系统提供的基础库文件,当Windows更新共享库且共享库不能向后兼容时(DLL自身并不能向后兼容,这种情况通常发生在DLL的内存布局发生了改变),那些依赖于老版本共享库的应用程序就不能正常工作了。为了解决这个问题,微软重写了DLL动态加载子系统,提出了并行程序集的解决方案,即允许多个版本的库共同存在,应用程序通过manifest描述自身所依赖的文件,SxS Manager再通过manifest按照一定的规则找到应用程序的依赖文件,使应用程序正确工作。

Read more »

CEF(The Chromium Embedded Framework) 是Marshall Greenblatt于2008年基于 Google Chromium 项目创建由BSD开源协议授权的开源项目。它和Chromium项目不同之处在于,Chromium项目侧重于Google Chrome应用开发,而CEF侧重于使浏览器更容易内嵌到第三方应用中。CEF屏蔽了Chromium和
Blink代码的复杂性,在Chromium Content API之上提供了一套友好且稳定的API,开发者只需要在CEF API的基础上就能很容易地建立起基于CEF的应用。了解更多关于CEF的内容,请参考CEF官网

准备编译环境

CEF官网提供了两种发布方式:二进制发布和源码发布。二进制发布包含了基于CEF开发的应用程序所依赖的所有二进制文件和头文件。本文主要讲CEF的二进制发布,官网提供了较新版本的二进制发布包,下载地址在这里, 选择一个合适的版本(在写本文是,最新版本是3202)。编译CEF需要依赖以下编译环境:

  • OS:Win7 +
  • Visual Studio: VS2015u3 + Win10.0.14393 SDK + Ninja
  • CMake: version 2.8.12.1+

需要注意的是安装VS2015u3的时候,默认是不会安装Win10.0.14393 SDK 的,所以需要你手动勾选;

CMake可以去CMake官网下载 Windows安装版本。

Read more »

由于项目需要用到内嵌浏览器,IE内核太依赖于操作系统,对H5的支持也不太好。CEF是基于chromium 项目的内嵌浏览器开源框架,已经应用到了很多产品中,而且有比较健全的论坛官方支持,是项目的不二选择。由于客户端要运行到Windows XP系统,但Chome浏览器在49版本(对应CEF3版本为2623,以下说的CEF均指CEF3)后不再支持Win7以下系统。CEF二进制发布官网上并未包含2623版本, 但CEF提供了源码发布,官方也给了源码编译文档说明,虽然按照官方文档说明进行构建,但在编译CEF 2623版本过程还是遇到不少问题,在此做个记录供网友参考。

准备编译环境

  • OS: Win7 64bit 以上系统, 至少8G内存,60G以上硬盘,最好是SSD
  • Visual Studio: VS2015u3 + Win10.0.14393 SDK + Ninja
  • Python 2.7+
  • 下载 automate-git.py 脚本

注意:

  1. 由于某些原因(你懂的),源代码是同步不下来的,建议使用VPN。另外,CEF基于chromium,源码比较大,同步源码时间比较漫长,耐心等待;
  2. 安装VS2015u3的时候,默认是不会安装Win10.0.14393 SDK的,所以需要你手动勾选;
  3. 安装python后需要将python的执行环境加入到环境变量中;
Read more »

对于Windows应用, 当应用发布出去之后,如果应用程序在用户机器上发生了崩溃,我们需要这样一种手段,即在程序崩溃的瞬间能够“记录”下崩溃时进程、线程、栈、栈上下文等信息,这些信息对我们分析崩溃原因非常有帮助。另外,由于客户端程序一般是运行在用户的机器上,当生成崩溃信息后,还需要将这些信息上报至服务器,以方便开发者能够快捷地拿到这些崩溃信息进行分析。一般来说客户端程序崩溃的收集与处理流程如下图:

客户端程序崩溃的收集流程

  1. 开发者开发好代码后,由编译集群编译后将产出的二进制等文件放入产品库中,产品库会记录每次发布的版本号(version)、安装程序(*.exe)、对应版本的符号表(.pdb)等信息。
  2. 通过各种发布渠道发布最新版本。
  3. 用户在使用过程中产生崩溃,生成崩溃时主进程启动一个辅助进程(BugReport.exe)收集崩溃信息。
  4. 辅助进程将收集到的崩溃信息上传至服务器。
  5. 开发者根据程序版本号(version)和用户标识(用户id)从服务器上拿到用户机器上程序生成的崩溃信息(*.dmp),再从产品库中提取对应版本的符号表文件,最后利用调试工具(Visual Studio、WinDbg等)分析崩溃原因,将修复后的版本再次按照以上流程发布出去。
Read more »

vim是unix下一款非常强大的文本编辑器。vim本身支持很多个性化的配置,根据自身需求,合理的配置vim,能够很好的提高开发效率。本文介绍vim下无插件的常用配置,关于配置vim有一个非常重要的原则就是:不要将你不明白的配置项写到配置文件中。

准备环境

首先需要安装vim,目前大部分类unix系统默认都已经安装好了。如果没有安装,通常可以用系统的包管理功能进行安装,如centos下使用yum安装。但使用包管理工具安装默认的包源的vim版本可能比较低,推荐使用源码方式安装:

1
git clone https://github.com/vim/vim.git

源代码clone下来后,src/INSTALL文档中有非常详细的安装说明文档,根据自己的系统环境按步骤安装即可。

Read more »

Welcome to Hexo! This is your very first post. Check documentation for more info. If you get any problems when using Hexo, you can find the answer in troubleshooting or you can ask me on GitHub.

Quick Start

Create a new post

1
$ hexo new "My New Post"

More info: Writing

Run server

1
$ hexo server

More info: Server

Generate static files

1
$ hexo generate

More info: Generating

Deploy to remote sites

1
$ hexo deploy

More info: Deployment