标题：MSI文件
基本信息
概述MSI文件是Windows Installer的数据包，它实际上是一个数据库，包含安装一种产品所需要的信息和在很多安装情形下安装（和卸载）程序所需的指令和数据。MSI文件将程序的组成文件与功能关联起来。此外，它还包含有关安装过程本身的信息:如安装序列、目标文件夹路径、系统依赖项、安装选项和控制安装过程的属性。[1]MSI文件的由来说到MSI文件，不得不先说说Windows Installer，它不只是安装程序，而是可扩展的软件管理系统。Windows Installer的用途包括:管理软件的安装、管理软件组件的添加和删除、监视文件的复原以及使用回滚技术维护基本的灾难恢复。另外，Windows Installer还支持从多个源位置安装和运行软件，而且可以由想要安装自定义程序的开发人员自定义。要想使用这些功能，就必须通过MSI文件。MSI文件是Windows Installer的数据包，它实际上是一个数据库，包含安装一种产品所需要的信息和在很多安装情形下安装（和卸载）程序所需的指令和数据。MSI文件将程序的组成文件与功能关联起来。此外，它还包含有关安装过程本身的信息:如安装序列、目标文件夹路径、系统依赖项、安装选项和控制安装过程的属性。MSI的优势Windows Installer技术就是合并在一起发挥作用的两个部分:客户端安装程序服务（Msiexec.exe） 和Microsoft软件安装（MSI）软件包文件。 
Msiexec.exe 程序是 Windows Installer 的一个组件。 当 Msiexec.exe 被安装程序调用时，它将用 Msi.dll 读取软件包文件 (.msi)、应用转换文件 (.mst) 并合并由安装程序提供的命令行选项。 Windows Installer 执行所有与安装有关的任务：包括将文件复制到硬盘、修改注册表、创建桌面快捷方式、必要时显示提示对话框以便用户输入安装首选项。 
当双击MSI文件的时候，与之关联的Windows Installer 的一个文件Msiexec.exe 被调用，它将用Msi.dll读取软件包文件（.msi）、应用转换文件（.mst）进行进一步处理，然后 Windows Installer 执行所有与安装有关的任务:包括将文件复制到硬盘、修改注册表、创建桌面快捷方式，必要时显示提示对话框以便用户输入安装需要的信息，就这样，一个程序安装到了你的电脑上。 
采用MSI安装的优势在于你可以随时彻底删除它们，更改安装选项，即使安装中途出现意想不到的错误，一样可以安全地恢复到以前的状态，正是凭着此强大功能，越来越多的软件开始使用MSI作为发行的方式了。 如果你对MSI文件感兴趣，可以用WinRAR等压缩软件打开，看一下里面的内容，满足一下好奇心。MSI格式文件安装支持程序WinMe和WinXP对MSI支持得很好，但其他版本的Windows就需要安装一个插件才能使用MSI格式
  MSI格式文件图标的文件。 
MSI如何打开
MSI支持双击打开。 它比EXE更好些，你可以单击右键看看多了些什么，现在的大公司都是MSI进行封装程序，便于安装。
怎么定制自己的MSI文件
前面我们介绍了很多MSI文件的内容，其实MSI并不神秘、复杂，我们自己都能制作，并且制作MSI文件的工具已经在Windows的安装盘上了。 
首先，找到Windows2000的安装光盘，双击下边的这个位置的文件:valueadd\3rdparty\Mgmt\Winstleadmle.msi， 
很快软件就自动安装到了电脑中。在开始菜单的所有程序里边就多了“VERITAS software”组，点击运行里边的“VERITAS discover”就可以开始制作MSI文件了。 
制作MSI文件的基本原理就是，在我们安装一个软件以前，先给电脑的磁盘拍个“快照”。然后将要安装的软件安装到电脑中，并对注册表等内容做修改，等到确认这个软件能正确运行后，再给电脑的磁盘拍个“快照”。Discover软件会自动找出两次“快照”的不同，并且生成一个MSI文件。最后，如果你愿意，可以使用VERITAS software组中的另一个工具:Veritas Software Console对这个MSI文件进行进一步的包装、调整，这样一个MSI文件包就生成了。 
下面，我们具体通过一个例子来介绍一下如何使用Discover生成一个MSI文件，假定我们的软件my的安装过程是:将my.exe文件安装到C:\programmeme files\myprog下，将run.dll放到windows\system里，在注册表的HKEY_LOCAL_MACHINE的software项中建立一个myprom项，并且在其中添加一个值为OK的value项目。第一步:运行Discover弹出程序界面可以直接点“Next”按钮继续。第二步:在图3的对话框中首先在第一文本框为你的程序起个名字，比如这里用的“My programmeme”;第二个对话框是输出MSI文件的存放位置和文件名，这里选择保存为E:\my_setup.msi;第三个框为压缩包的语言，可以使用其默认值。填好后点“Next”按钮。第三步:为Discover存放快照文件选择一个临时的空间，可以选一个磁盘空间比较大的磁盘。第四步:在接下来的对话框中要选择Discover需要扫描并拍“快照”的磁盘，你的程序要装到哪个盘就选择哪个盘，并且点一下“Add”按钮加到要扫描文件的列表中，你可以选择几个或者所有的磁盘，不过这样会在扫描的过程中浪费更多的时间，所以应该尽量少选择磁盘。这里只选择C盘，因为我们的软件是装到C盘的。然后点“Next”。第五步:在对话框中为上一步选择每个磁盘选择需要扫描的文件夹或文件，因为我们上一步只选择了C盘，所以为C盘选择就可以了。另外，Discover自动加入了一些特殊的文件和目录，我们可以根据需要决定是否将它们移出要扫描的文件列表，不过最好保留它们。这里我们把“C:\programmeme files”和Windows文件夹添进去，先在左边的文件框中点中文件或文件夹，然后点Add按钮就可以了。对于注册表的扫描，Discover为了加快扫描速度，只扫描部分注册表，可以扫描到大部分程序对注册表的修改，如果不放心的话，也可以将下边的“Enhanced Registry Scan”点中，这样速度可能会慢很多，临时文件也大大增加，不过能对注册表所有的改动加以记录。由于我们的软件对注册表只是小改动，所以没必要选择扫描所有注册表。然后点“Next”继续。第六步:接下来Discover将对系统进行扫描生成“快照”，要耐心的等待，可能要几分钟的时间才行。第七步:在扫描完成后会弹出一个对话框，大概意思就是告诉你扫描已经完成，问你是否要选择一个程序来运行，从而自动安装你的软件，我们正要制作安装程序，没有程序可运行，所以要点“取消”按钮。第八步:安装接下来，我们就要手动安装自己的软件了，先将my.exe文件拷贝到C:\programmeme files\myprog下，再把run.dll拷贝到windows\system里，然后用注册表编辑器在注册表的HKEY_LOCAL_MACHINE的software项中建立一个myprom项，并在其中添加一个值为OK的value键。注意，除了这些改动，应尽量避免其他无关的改动。然后我们试着运行一下刚刚安装的my.exe文件，测试一下是否正确安装。第九步:确认安装没有问题了，要再次运行Discover程序，这次运行Discover时，出现的是如图6所示的一个界面，有两个选项，第一项是生成安装后的快照，用于与前一次的快照比较生成MSI文件，第二个选项是放弃上一次的扫描，当然要选第一项了，然后点“Next”。这时Discover又开始重新对电脑进行扫描，生成“快照”，并自动生成了安装文件。第十步:如果你愿意，可以启动与Discover程序在一起的VERITAS Software console对MSI文件的信息进一步更改，过程比较简单，只要先打开一个MSI文件，然后就可以进行改动了，这里就不介绍了。 
就这样，我们就生成了一个自己的MSI文件了。