MSI 文件

本文介绍了MSI文件,它是Windows Installer的数据包,是可扩展的软件管理系统。阐述了其历史、原理和优势,如可随时彻底删除、更改安装选项等。还详细说明了定制自己MSI文件的步骤,通过给磁盘拍“快照”对比生成文件。

一、简介

我们经常可以看到许多软件只有一个扩展名为MSI的文件,双击这个文件运行,就会出现和Windows应用软件安装非常相似的安装过程,MSI文件到底是什么?为什么许多软件开始用MSI格式来发行呢?请听我慢慢说来。

1.历史
说到MSI文件,不得不先说说Windows Installer,它不只是安装程序,而是可扩展的软件管理系统。Windows Installer的用途包括:管理软件的安装、管理软件组件的添加和删除、监视文件的复原以及使用回滚技术维护基本的灾难恢复。另外,Windows Installer还支持从多个源位置安装和运行软件,而且可以由想要安装自定义程序的开发人员自定义。要想使用这些功能,就必须通过MSI文件。MSI文件是Windows Installer的数据包,它实际上是一个数据库,包含安装一种产品所需要的信息和在很多安装情形下安装(和卸载)程序所需的指令和数据。MSI文件将程序的组成文件与功能关联起来。此外,它还包含有关安装过程本身的信息:如安装序列、目标文件夹路径、系统依赖项、安装选项和控制安装过程的属性。
2.原理

Windows Installer技术就是合并在一起发挥作用的两个部分:客户端安装程序服务(Msiexec.exe) 和Microsoft软件安装(MSI)软件包文件。当双击MSI文件的时候,与之关联的Windows Installer 的一个文件Msiexec.exe 被调用,它将用Msi.dll读取软件包文件(.msi)、应用转换文件(.mst)进行进一步处理,然后 Windows Installer 执行所有与安装有关的任务:包括将文件复制到硬盘、修改注册表、创建桌面快捷方式,必要时显示提示对话框以便用户输入安装需要的信息,就这样,一个程序安装到了你的电脑上。
2.优势

采用MSI安装的优势在于你可以随时彻底删除它们,更改安装选项,即使安装中途出现意想不到的错误,一样可以安全地恢复到以前的状态,正是凭着此强大功能,越来越多的软件开始使用MSI作为发行的方式了。   如果你对MSI文件感兴趣,可以用WinRAR等压缩软件打开,看一下里面的内容,满足一下好奇心。

二、定制自己的MSI文件

前面我们介绍了很多MSI文件的内容,其实MSI并不神秘、复杂,我们自己都能制作,并且制作MSI文件的工具已经在Windows的安装盘上了。

首先,找到Windows2000的安装光盘,双击下边的这个位置的文件:Valueadd/3rdparty/Mgmt/Winstle/Swiadmle.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存放快照文件选择一个临时的空间,可以选一个磁盘空间比较大的磁盘。

第四步:在接下来如图4的对话框中要选择Discover需要扫描并拍“快照”的磁盘,你的程序要装到哪个盘就选择哪个盘,并且点一下“Add”按钮加到要扫描文件的列表中,你可以选择几个或者所有的磁盘,不过这样会在扫描的过程中浪费更多的时间,所以应该尽量少选择磁盘。这里只选择C盘,因为我们的软件是装到C盘的。然后点“Next”。

第五步:在如图5所示的对话框中为上一步选择的每个磁盘选择需要扫描的文件夹或文件,因为我们上一步只选择了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文件了。

编辑点评:以前我们也经常用到MSI程序,只不过是知其然而不知其所以然,阅读本文后相信大家同我一样对MSI格式的文件有了更深的了解,而且对MSI发布也有了感性认识。其中作者介绍的一些插件还是非常实用的,大家不要错过哟。


MSI 文件Microsoft Windows Installer 安装包的一种格式,它本质上是一个数据库文件,包含了安装、配置和卸载软件所需的所有信息。Windows Installer 是操作系统的一部分,用于管理软件的安装过程、组件的添加与删除、文件复原以及提供灾难恢复机制。MSI 文件的作用是将应用程序的组成文件与其功能关联起来,并且存储了安装序列、目标文件夹路径、系统依赖项、安装选项等控制安装过程的属性[^1]。 ### 如何处理 MSI 文件 #### 打开 MSI 文件 - **使用命令行工具**:可以通过 `msiexec` 命令来执行 MSI 文件的安装或卸载操作。例如: ```bash msiexec /i filename.msi ``` 这条命令会启动 MSI 安装程序并开始安装 `filename.msi` 包含的应用程序。 - **使用图形界面工具**:有一些专门的工具如 Orca、InstEd 可以用来查看和编辑 MSI 文件的内容。这些工具允许用户修改安装逻辑、调整安装条件或者修复损坏的 MSI 文件。 #### 创建 MSI 文件 创建 MSI 文件通常需要专业的安装包制作工具,比如 WiX Toolset、InstallShield 或者 Visual Studio 的安装项目模板。以下是使用 WiX Toolset 创建简单 MSI 文件的基本步骤: 1. 编写 XML 格式的 `.wxs` 文件定义安装包结构。 2. 使用 `candle.exe` 编译 `.wxs` 文件生成 `.wixobj` 对象文件。 3. 使用 `light.exe` 链接对象文件生成最终的 `.msi` 安装包。 示例代码(WiX Toolset): ```xml <Wix xmlns="http://schemas.wixtoolset.org/wi"> <Product Id="*" Name="MyApplication" Language="1033" Version="1.0.0.0" Manufacturer="MyCompany" UpgradeCode="PUT-GUID-HERE"> <Package InstallerVersion="200" Compressed="yes" InstallScope="perMachine" /> <MajorUpgrade DowngradeErrorMessage="A newer version of [ProductName] is already installed." /> <MediaTemplate /> <Feature Id="ProductFeature" Title="MyApplication" Level="1"> <ComponentGroupRef Id="ProductComponents" /> </Feature> </Product> <Fragment> <Directory Id="TARGETDIR" Name="SourceDir"> <Directory Id="ProgramFilesFolder"> <Directory Id="INSTALLFOLDER" Name="MyApplication" /> </Directory> </Directory> </Fragment> <Fragment> <ComponentGroup Id="ProductComponents" Directory="INSTALLFOLDER"> <!-- TODO: Remove the comments around this Component element and the ComponentRef in the Feature element to add resources to install --> <!-- <Component Id="ApplicationFiles" Guid="YOURGUID-HERE"> <File Id="ApplicationFile" Source="path\to\your\application.exe" /> </Component> --> </ComponentGroup> </Fragment> </Wix> ``` #### 管理 MSI 安装 - **静默安装**:可以使用 `/qn` 参数进行无提示安装。 ```bash msiexec /i filename.msi /qn ``` - **日志记录**:添加 `/l*v log.txt` 参数可以获得详细的安装日志。 ```bash msiexec /i filename.msi /l*v log.txt ``` - **卸载 MSI 包**:通过指定 `/x` 参数加上产品代码或者 MSI 文件名来进行卸载。 ```bash msiexec /x {PRODUCT_CODE} # 或者 msiexec /x filename.msi ``` MSI 文件提供了标准化的方式来部署 Windows 应用程序,使得企业级部署更加容易管理和维护。对于开发者来说,理解如何创建和管理 MSI 文件是非常有用的技能,特别是在需要自动化部署解决方案的情况下。
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值