最近工作需要,研究了一下利用Wix制作Windows安装包。前期,主要参考了一些书籍和员友stoneniqiu的系列教程。书籍的下载路径列在文章最后的附录中,以方便各位员友。后期主要还是自己测试和参考wix toolset的官方文档。

Windows Installer是一项古老的技术,起源于Windows 98时代,目的在于保证系统的稳定性。Windows Installer主要包含两个部分:Windows Installer Service和Microsoft Installer File(MSI)。在运行MSI文件时,Windows Installer Service可以检测操作系统环境,确定程序是否可以被恰当的安装。

1.Microsoft Installer File(MSI)

首先,介绍一下三种常见的安装包的格式:MSI、EXE、CAB。MSI格式是Windows Installer 原生支持的文件格式。实际上,MSI是个database文件,里面包含了我们要安装的程序的各种信息。而EXE和CAB文件格式则是将MSI包含在EXE和CAB文件中,来执行一些Custom Action。Installer Database(setup.msi)由安装程序工具所制作,里面含有安装程序的指令,流程(向导画面所需的数据),数据,配置设置等,为 Windows Installer 的安装数据源,有时候文件也会被压缩在Installer Database中。Installation Bootstrapper(setup.exe):引导Windows Installer以运行安装程序的起始用程序,通常以setup.exe命名。

CAB文件是一种网络安装形式,可以运行在浏览器中。具体的区别可以参见下图:

windows 上安装ruby on rails windows install怎么安装_安装包

如果MSI文件是个数据库,那么我们怎么查看它呢?实际上Windows SDK提供了原生的查看工具Orca.exe。建议大家使用Everything搜索一下就可以找到Orca.msi,在我的Win7中它存储在C:\Program Files (x86)\Microsoft SDKs\Windows\v7.0A\Bin\Orca.msi,安装一下就可以了,如果实在找不到可以下载附录中我提供的副本。利用Orca.exe,甚至可以手动创建MSI安装包。

windows 上安装ruby on rails windows install怎么安装_安装程序_02

2.Windows Installer Service

那么,什么是Windows Installer Service呢?Windows Installer Service随操作系统一起安装,可以在`Services.msc`查看到windows Installer这项服务(msiexec.exe+msi.dll)。Windows Installer Service在安装程序运行期间,由Installation Bootstrapper引导,负责加载Installer Database,执行事务式的安装功能,确保安装程序对系统的修改,不是成功就是失败。即如果安装失败,机器状态(Machine State)可以回滚到安装前的状态。

3.常见的安装程序制作工具

  • Windows Setup Project:Visual Studio 2008/2010默认提供了Setup Project扩展,VS2012将此功能移除了。但用户对此功能需求高涨,在VS2013中,Setup Project又以扩展包的形式提供:Microsoft Visual Studio 2013 Installer Projects。
  • Installshield Project:微软官方推荐的商业第三方的安装程序制作工具。在Visual Studio中集成了Express版,可以制作简单的安装包。
  • Wix Setup Project:本文要介绍的微软官方推荐的开源第三方的安装程序制作工具。