转自: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 clean
ninja -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()进行回滚。

chromium的安装程序的更多相关文章

  1. [Tool]Inno Setup创建软件安装程序。

    这篇博客将介绍如何使用Inno Setup创建一个软件安装程序. Inno Setup官网:http://www.jrsoftware.org/isinfo.php. 可以下载到最新的Inno Set ...

  2. [转]MSI安装程序中的文件替换

    原文链接:http://teach.hanzify.org/article/652-1233562028.html 前言 最近有汉化朋友问起如何不重新制作MSI文件,而直接用汉化好的文件替换MSI安装 ...

  3. Windows安装程序 报错 “已安装了较新版本” 导致无法安装程序的解决方法

    打开注册表 HKEY_CURRENT_USER\Software\Microsoft\Installer\Products ,“查找”程序名称 如果有程序名和安装程序相同的 ,删除整个 项 ! 然后就 ...

  4. php安装程序

    php安装程序 制作原理和步骤 检查目录或文件权限 修改或者添加配置文件 检查配置文件的正确性 导入数据库 锁定或删除安装文件 用到函数 iswritable("data/config.ph ...

  5. 关于SQL Server 安装程序在运行 Windows Installer 文件时遇到错误

    前几日安装sql server2008r2 的时候碰到这个问题: 出现以下错误: SQL Server 安装程序在运行 Windows Installer 文件时遇到错误. Windows Insta ...

  6. 使用好压(HaoZip)软件打包EverEdit制作安装程序

    最近使用EverEdit,使用原始的安装程序安装后,需要重新安装插件,对配置文件进行了修改,定制了工具栏.将安装后的程序目录进行打包,制作新的安装包,便于携带. 以下为打包制作过程: 打包原料:Eve ...

  7. Win10安装程序出现error code 2502 2503

    在Win10中,在安装msi安装包的时候常常会出现代码为2502.2503的错误.其实这种错误是由于安装权限不足造成的,可以这种msi的安装包不像其他exe的安装程序,在安装包上点击"右键& ...

  8. <转>[WinForm] VS2010发布、打包安装程序(超全超详细)

    1. 在vs2010 选择“新建项目”→“ 其他项目类型”→“ Visual Studio Installer→“安装项目”: 命名为:Setup1 . 这是在VS2010中将有三个文件夹, 1.“应 ...

  9. [WinForm] VS2010发布、打包安装程序

    最近用到了VS2010WinForm的程序打包功能,网上发现一篇好帖,在此记录以供日后他人之需. 原文链接地址:http://www.mamicode.com/info-detail-2453.htm ...

随机推荐

  1. (五)Spring 对事务的支持

    第一节:事务简介 满足一下四个条件: 第一:原子性: 第二:一致性: 第三:隔离性: 第四:持久性: ------------------------------------------------- ...

  2. 20165301 预备作业二:学习基础和C语言基础调查

    <做中学>读后感及C语言学习调查 读<做中学>有感 娄老师在文章中多次提到「做中学(Learning By Doing)」的概念,并通过娄老师自己的减肥经历.五笔练习经历.乒乓 ...

  3. gc 调优记录

    qps 10,0000 -Xms10240m -Xmx10240m -XX:NewRatio=5 -XX:SurvivorRatio=6 2017-12-19T15:10:14.539+0800: 1 ...

  4. selenium webdriver操作各浏览器

    描述 本文主要是针对Chrome 62 , firefox57 ,和IE11 三个版本的操作.相关的driver .可点击以下链接.所有的driver 建议放在浏览器的目录下,本文中所有的driver ...

  5. MySQL之查漏补缺

    1.TRUNCATE语句和DELETE语句的区别 1.delete语句,是DML语句,truncate语句通常被认为是DDL语句. 2.delete语句,后面可以跟where子句,通常指定where子 ...

  6. TeX Live & TeXstudio 安装手记

    数据库课上又看到了那位用 beamer 做 slides 的师兄,想到自己一拖再拖的LaTeX入门,决定赶快动手装个环境再说~在经过一番搜索和研究之后决定先在 windows 底下试用,选择 TeX ...

  7. 【51nod】1227 平均最小公倍数

    题解 这个故事告诉们数论函数不要往分式上跑,你推不出来 好久没推式子了这么明显的转化我都忘了= = 首先\(A(n) = \frac{1}{n} \sum_{i = 1}^{n} \frac{i * ...

  8. 牛客网 牛客练习赛43 F.Tachibana Kanade Loves Game-容斥(二进制枚举)+读入挂

    链接:https://ac.nowcoder.com/acm/contest/548/F来源:牛客网 Tachibana Kanade Loves Game 时间限制:C/C++ 1秒,其他语言2秒 ...

  9. ref:Java安全之反序列化漏洞分析(简单-朴实)

    ref:https://mp.weixin.qq.com/s?__biz=MzIzMzgxOTQ5NA==&mid=2247484200&idx=1&sn=8f3201f44e ...

  10. 图像 & 视频

    Python图像处理库:Pillow 初级教程 用Python做图像处理 python 视频处理,提取视频相关帧,读取Excel