博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
chromium的安装程序
阅读量:5896 次
发布时间:2019-06-19

本文共 2365 字,大约阅读时间需要 7 分钟。

转自:http://www.xue163.com/182/6/1822338.html#pinglun

 

这篇文章主要简单讲解chromium的安装程序mini_installer

在编译mini_installer时,要更改编译的参数把component设置为static_library,不然编译出来的mini_staller会报“mini_installer.exe is incompatible with the component build”的错误

 

python build\gyp_chromium -D"component=static_library"

 

可能重新编译之前需要清空之前编译的结果,清空完成后运行编译程序。

 

ninja -C out\Release -t cleanninja -C out\Release mini_installer

这个步骤会把之前的chromium重新编译了,所以在清空之前需要考虑之前使用shared_library编译的chromium是否需要保存。

 

关于static_library和shared_library的区别,我个人的理解是:

static library:程序运行时依赖的库函数在编译时被包含到编译的目标代码中,所以程序可以在没有这些库的机器上运行。

shared library:程序运行时依赖的库函数在编译时没有被包含到编译的目标代码中,而是把这些函数属于哪个库和它们在库中的地址等信息记录下来。
当使用到这些函数时,会根据已记录下的信息把函数所属的库加载进来。

mini_installer的工程在src\chrome\installer下,入口就是mini_installer.cc

mini_installer.exe的工作比较简单,主要是进行了以下几个工作。

 

  1. 确定工作目录,这个工作目录也就是解压包的目录,这个目录通过GetTempPath函数确定,在win7下为C:\Users\%USERNAME%\AppData\Local\Temp,%USERNAME%就是当前用户的名称。在Temp目录下会创建一个格式类似CR_B4D84.tmp的文件夹,这个包用来解压安装文件。
  2. 解压安装文件,在CR_B4D84.tmp文件夹中会得到两个文件setup.exe和CHROME.PACKED.7Z
  3. 创建进程运行setup.exe,并等待安装程序完成程序的安装。
  4. 删除CR_B4D84.tmp临时文件夹。是否删除CR_B4D84.tmp临时文件夹,由函数ShouldDeleteExtractedFiles决定。为了能够让程序不删除CR_B4D84.tmp临时文件夹,需要在注册表\HKEY_CURRENT_USER\Software\Chromium下加入一项。该项的名称为ChromeInstallerCleanup,类型为字符串值,值为"0"。

 

 

以上就是mini_installer.exe的工作,在这个过程中,会创建进程运行setup.exe。

 

setup.exe的代码看起来比较复杂,它的实现在代码,setup_main.cc中,主要工作包括:

确定安装目录,chromium的安装分为两种,一种是system install,另一种是user install,都是通过PathProviderWin函数获取安装路径,具体代码在base_paths_win.cc。

如果是system install,安装目录CSIDL_PROGRAM_FILES,对应C:\Program Files

如果是user install,安装目录CSIDL_LOCAL_APPDATA,我win7系统下对应C:\Users\%USERNAME%\AppData\Local\

上述的基础路径下,会加上Chromium\Application\得到目标路径,这个路径在InstallerState::Initialize函数中生成,并保存在target_path_中。

 

调用安装函数InstallProducts,该函数的主要工作在InstallProductsHelper完成。

1、CreateTemporaryAndUnpackDirectories函数

生成temp_path:C:\Users\%USERNAME%\AppData\Local\Chromium\Application\Temp

生成解压路径unpack_path:C:\Users\%USERNAME%\AppData\Local\Chromium\Application\Temp\source

2、初始化rchivePatchHelper实例archive_helper

UncompressAndPatchChromeArchive函数

进行第一次解压,在unpack_path目录下解压CHROME.PACKED.7Z,得到chrome.7Z

UnPackArchive函数

进行第二次解压,解压chrome.7Z得到Chrome-bin目录

从Chrome-bin目录下得到当前安装的版本号installer_version

3、调用InstallOrUpdateProduct函数安装程序

该函数中调用InstallNewVersion函数,其中install_list包含了安装程序进行的一系列操作,包括创建目录、拷贝文件和修改注册表等。

在AddInstallWorkItems函数中为install_list添加安装的操作,然后调用install_list->Do()执行操作。

如果安装过程中出现错误,则调用install_list->Rollback()进行回滚。

转载地址:http://zpxsx.baihongyu.com/

你可能感兴趣的文章
js如何实现10秒倒计
查看>>
ubuntu下解决鼠标滚轮不能使用的问题
查看>>
隐马尔可夫(HMM)、前/后向算法、Viterbi算法 再次总结
查看>>
LAV Filters
查看>>
多媒体客服的选择与应用
查看>>
iOS11 automaticallyAdjustsScrollViewInsets和estimatedRowHeight适配
查看>>
订阅linux kernel的mail list
查看>>
mysql 批量更新多条记录(且不同值)的实现方法
查看>>
Hadoop上路_02-hadoop介绍和环境准备
查看>>
JFinal多参数搜索条件自动组装及参数传递
查看>>
Lua与ObjC的交互
查看>>
c++ ios_base register_callback方法使用
查看>>
Java中为什么需要Object类,Object类为什么是所有类的父类
查看>>
在Hadoop-1.2.1中跑著名的wordcount例程
查看>>
css3 -webkit-flex 布局
查看>>
大数据Benchmark
查看>>
windows server2008多用户远程登陆设置方法
查看>>
sencha touch巧妙使用请求超时提升用户体验
查看>>
15. 3Sum
查看>>
26. Remove Duplicates from Sorted Array
查看>>