转自: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. POJ 3087 Shuffle'm Up (模拟+map)

    题目链接:http://poj.org/problem?id=3087 题目大意:已知两堆牌s1和s2的初始状态, 其牌数均为c,按给定规则能将他们相互交叉组合成一堆牌s12,再将s12的最底下的c块 ...

  2. ceph rgw java sdk 使用域名访问服务时需要设置s3client的配置项 PathStyleAccess 为true, 负责将报域名异常

    Caused by: java.net.UnknownHostException: my-new-bucket.s3.yyclouds.com at java.net.InetAddress.getA ...

  3. Jury Jeopardy(反向模拟)

    aaarticlea/png;base64,iVBORw0KGgoAAAANSUhEUgAAAy8AAAI7CAIAAABqfzNeAAAgAElEQVR4nOy9e2AU1d3/f2ov07q166

  4. Validate Binary Search Tree——体现二查搜索树思想的一道题

    Given a binary tree, determine if it is a valid binary search tree (BST). Assume a BST is defined as ...

  5. Windows Azure 初体验

    最近看到windows azure 在做活动,只需花一块钱就可以体验一个月的windows azure. 于是,我就注册了一个账号也尝试一把云时代,传送门. 注册很简单的,成功后可以看到这个界面. 然 ...

  6. 借助Visual Studio Code提高基于ActionScript的LayaAir HTML5游戏的调试效率

    借助Visual Studio Code提高基于ActionScript的LayaAir HTML5游戏的调试效率 使用Visual Studio Code(VS Code)调试的优势 借助VS Co ...

  7. webpack3.0+总结

    ul>li{ color:blue; font-size:20px } .items>ul>li>ul>li{ color:crimson } --> webpac ...

  8. 洛谷P2231 [HNOI2002]跳蚤 [数论,容斥原理]

    题目传送门 跳蚤 题目描述 Z城市居住着很多只跳蚤.在Z城市周六生活频道有一个娱乐节目.一只跳蚤将被请上一个高空钢丝的正中央.钢丝很长,可以看作是无限长.节目主持人会给该跳蚤发一张卡片.卡片上写有N+ ...

  9. docker chown: changing ownership of '/var/lib/XXX': Permission denied

    Links: 1.entos7下docker Permission denied 2.查看 SELinux状态及关闭SELinux 方法: 1.查看SELinux状态sestatus -vgetenf ...

  10. 【BZOJ 3747】 3747: [POI2015]Kinoman (线段树)

    3747: [POI2015]Kinoman Time Limit: 60 Sec  Memory Limit: 128 MBSubmit: 830  Solved: 338 Description ...