原文:Wix学习整理(3)——关于Windows Installer和MSI

关于Windows Installer

Windows Installer是微软Windows操作系统自带的一个软件安装和配置服务,其实现了软件安装的业务逻辑:如何安装软件?如何修改注册表键值?如何创建快捷方式?如何操作网站目录或注册服务?等等。Windows Installer技术由两部分组成:客户端安装程序服务(Msiexec.exe)和Microsoft软件安装包文件(MSI)。

关于MSI

Windows Installer是从一个数据库中来获取软件安装的相关信息。MSI文件就是一个Windows Installer的数据库,它包含了安装一种产品所需信息、安装(或卸载)程序所需的指令和数据;它将程序的组成文件和功能关联起来;它还包含有关安装过程本身的信息,如目标文件夹路径、系统依赖项、安装选项和控制安装过程的属性。

MSI数据库的几个重要表

既然MSI是一个数据库,那么它就应该由多个关系表来组成。下面我们就简单地介绍MSI的几个重要的表。

表格 1 MSI的几个重要表说明

表名

说明

Directory

指定了产品的目录结构,包括源目录结构和目标目录结构。

Component

指定了产品的基本组件结构。

Feature

Component的组合就称为Feature,是用户选择安装的可视部件。

File

指定了需要安装到目标目录的文件。

ShortCut

记录了产品需要在目标计算机上安装快捷方式所需的信息。

Register

记录了产品需要在目标计算机上注册的注册表键值信息。

Property

记录了产品安装过程中所需的属性值。

Feature表和Component表

Feature和Component是软件安装中非常重要的两个概念。Feature和Component都可以翻译为组件,两者的区别可以说是:Feature是逻辑上的而Component是物理上的。Feature是应用或产品所有功能的一个子集,用户可以独立地选择是否安装。Component是产品或应用的最小组成单元,它可以由一个文件,或一个快捷方式,或一个注册表键值,或它们的组合来组成。

Feature是由Component组成的。Feature具有树状嵌套结构,最大深度为16。在安装的过程中,可以由用户来选择是否安装某个Feature。若父Feature没有被选择,则子Feature也不会被安装。

Component是产品或应用的一小片,每一个要安装的Component都要由一个唯一的GUID值来标识,以便Windows Installer进行跟踪。若某个Component没有GUID值,则安装时不会被安装注册,无GUID的Component一般用于只在安装时的功能实现,例如删除某些临时文件等。

Directory表说明

Directory表指定了产品安装的目录结构,包括目标目录结构和源目录结构。Directory表有三个表项:标识符ID、父目录Directory_Parent和DefaultDir。表项Directory_Parent指向该目录的父目录,而通过表项ID和DefaultDir的值来确定目标目录结构和源目录结构。

目录结构必须有且仅有一个根目录,这个根目录的标识符必须指定为TARGETDIR(TARGETDIR是Windows Installer预定义的属性,其值可以通过命令行或用户界面进行设置),而根目录的SourceDir则必须指定为SourceDir(SourceDir默认的属性值为.msi文件所在的路径)。如果属性TARGETDIR的值被指定了,则目标根目录为TARGETDIR的属性值;若该属性未有值,则目标根目录为Windows Installer预定义属性ROOTDRIVE的值。而源根目录则为SourceDir的属性值。

对于非根目录,若Directory的标识符ID中指定的属性被定义了,则该属性的值即为目标目录,否则取DefaultDir表项中的值作为目标父目录下的一个子目录。而源目录则是将DefaultDir表项中指定的值作为源父目录的一个子目录。

五个必需属性

每个安装包必须要有五个必需属性(Required Properties):ProductCode、ProductLanguage、Manufacturer、ProductName和ProductVersion。

表格 2 五个必需属性

属性名

说明

ProductCode

唯一的、大写的GUID值,用于标识要安装的产品。

ProductLanguage

指示了用户界面上除写入数据库的字符串外的其余字符串所用的语言的数字ID(如1033、2046)。

Manufacturer

指示产品生产厂商的字符串值。

ProductName

产品名称。

ProductVersion

产品版本号,版本号的格式为major.minor.build,其中major和minor最大数字为255,build的最大数字为65535。

Wix学习整理(3)——关于Windows Installer和MSI的更多相关文章

  1. Wix学习整理(5)——安装时填写注册表

    原文:Wix学习整理(5)--安装时填写注册表 一 Microsoft操作系统的注册表 什么是注册表? 注册表是Mircrosoft Windows中的一个重要的数据库,用于存储系统和应用程序的设置信 ...

  2. Wix学习整理(6)——安装快捷方式

    原文:Wix学习整理(6)--安装快捷方式 一 为HelloWorld案例添加安装快捷方式 通常我们安装一个应用软件的时候,都喜欢在桌面或开始菜单中添加快捷方式以便我们快速访问.现在我们就在上篇添加注 ...

  3. Wix学习整理(7)——在开始菜单中为HelloWorld添加卸载快捷方式

    原文:Wix学习整理(7)--在开始菜单中为HelloWorld添加卸载快捷方式 通过前面的几篇随笔,我们已经给我们的HelloWorld提供了填写注册表信息,以及开始菜单快捷方式和桌面快捷方式.这些 ...

  4. Wix学习整理(4)——关于WiX文件格式和案例HelloWorld的分析

    原文:Wix学习整理(4)--关于WiX文件格式和案例HelloWorld的分析 关于WiX文件格式 .wxs是WiX的源文件扩展名..wxs文件以类XML文件的格式来指定了要构造Windows In ...

  5. Wix学习整理(1)——快速入门HelloWorld

    原文:Wix学习整理(1)--快速入门HelloWorld 1 Wix简介 Wix是Windows Installer XML的简称,其通过类XML文件格式来指定了用于创建Windows Instal ...

  6. Wix学习整理(2)——HelloWorld安装添加UI

    原文:Wix学习整理(2)--HelloWorld安装添加UI 在前一篇随笔Wix学习整理(1)——快速入门HelloWorld中,我们制作的安装包安装界面太简单,没有与用户进行交互的过程.下面我们修 ...

  7. Windows Installer (MSI)知识学习

    http://www.cnblogs.com/QuitGame/archive/2006/01/10/314589.html 所有的安装过的程序都在C:\Windows\Installer下有缓存

  8. How to Set Directory Permissions at Install Time using an MSI Created Using Windows Installer XML (WIX)

    Original Link:  http://blogs.msdn.com/b/cjacks/archive/2008/12/04/how-to-set-directory-permissions-a ...

  9. Wix使用整理(一)

    由于工作需要,学习了一段时间Wix,总算小有起色.鉴于国内Wix  的普及和使用有限,这里将个人遇到得问题和解决方案记录下来,以便交流和相互促进. Wix :全称 Windows Installer ...

随机推荐

  1. oracle执行带输入输入参数的存储过程

    declare a1 ); a2 ); begin PKG_INPATIENT.prc_autojf('Y', a1, a2); end;

  2. jQuery EasyUI API 中文文档 - 分隔按钮(splitbutton)

    <html> <head> <script src="jquery-easyui/jquery.min.js"></script> ...

  3. POJ 2594 Treasure Exploration(最小路径覆盖变形)

    POJ 2594 Treasure Exploration 题目链接 题意:有向无环图,求最少多少条路径能够覆盖整个图,点能够反复走 思路:和普通的最小路径覆盖不同的是,点能够反复走,那么事实上仅仅要 ...

  4. 十分钟开发一个调用Activity的PhoneGap插件

    在HybridApp开发中,非常多业务我们是没有办法通过HTML5+js实现的,比方调用第三方的包括Activity的jar包,一些必须使用原生代码才干实现的功能,比方复杂的UI的效果,调用通讯相关的 ...

  5. MyEclipse-6.5注冊码生成器源代码

    打开MyEclipse新建一个Javaproject,然后新建类,粘贴例如以下代码,就可以生成MyEclipse的注冊码 import java.io.BufferedReader; import j ...

  6. UVA - 12119 The Bells are Ringing (枚举)

    Perhaps you all have heard the mythical story about Tower of Hanoi (The details of this story is not ...

  7. Qt学习经验之quit()、exit()、close()《转载》

       使用QT编辑界面,其中带来很大方便的一点就是Qt中自带丰富的.种类齐全的类及其功能函数,程序员可以在编辑程序的过程中简单地直接调用.关于窗口关闭的操作,在这里指出常用的三个槽,即quit(),e ...

  8. Windows 8 动手实验系列教程 实验8:Windows应用商店API

    动手实验 实验 8: Windows应用商店API 2012年9月 简介 编写Windows应用商店应用最令人瞩目的理由之一是您可以方便地将它们发布到Windows应用商店.考虑到世界范围内目前有超过 ...

  9. cell中button怎么得到对应cell的indexpath 以及关于UITableViewCellContentView的问题

    ============================================================ 博文原创,转载请声明出处 电子咖啡-专注于移动互联网 ============ ...

  10. MongoDB学习笔记(四) 用MongoDB的文档结构描述数据关系

    MongoDB的集合(collection)可以看做关系型数据库的表,文档对象(document)可以看做关系型数据库的一条记录.但两者并不完全对等.表的结构是固定的,MongoDB集合并没有这个约束 ...