2023年12月20日发(作者:)

MSI简介

历史

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

原理

Windows Installer技术就是合并在一起发挥作用的两个部分:客户端安装程序服务() 和Microsoft软件安装(MSI)软件包文件。当双击MSI文件的时候,与之关联的Windows Installer 的一个文件 被调用,它将用读取软件包文件(.msi)、应用转换文件(.mst)进行进一步处理,然后

Windows Installer 执行所有与安装有关的任务:包括将文件复制到硬盘、修改注册表、创建桌面快捷方式,必要时显示提示对话框以便用户输入安装需要的信息,就这样,一个程序安装到了你的电脑上。

优势

采用MSI安装的优势在于你可以随时彻底删除它们,更改安装选项,即使安装中途出现意想不到的错误,一样可以安全地恢复到以前的状态,正是凭着此强大功能,越来越多的软件开始使用MSI作为发行的方式。

总结

WinINSTALL Discover : 对Windows 2000的 文件下载安装试用,了解所有的功能及使用方法。安装配置简单,需一空间稍大磁盘安装。操作性比较复杂,对磁盘拍照时间较长,而且在对磁盘进行二次拍照时,容易出现文件读取失败的错误。生成的msi文件,可使用VERITAS software Console 进行编辑修改。该工具支持命令行生成。

Advanced Installer :对Advanced Installer 6.9.1版本下载试用。该工具全中文界面化操作,功能强大,操作简单。用该工具生成msi文件需 企业许可证,所以没有用该工具生成可执行的msi文件。

InstallShield AdminStudio :一款比较适用的msi文件工具,支持图形化界面操作,同时也支持命令行操作。用图形化界面操作生成msi文件无需用户干预,一次可安装多个程序,包括文件和注册表设置。下载破解版试用。

VS2005安装部署工程 :属于Microsoft自带工具,功能比较全面,包括对文件系统编辑、注册表编辑、文件类型编辑、用户界面编辑、自定义操作编辑及启动条件编辑。用vs2005生成msi文件,能实现一般所需的功能,如添加开始菜单栏、桌面快捷方式,添加删除程序,对注册表的修改及启动安装文件所需条件的实现。用vs2005还未解决的问题是还没实现添加并自动启动服务项功能。

MSI文件制作工具

1. MSI生成工具的比较图

属性 WinINSTALL

Discover

Microsoft

2005

InstallShield Advanced Installer

Visual Studio

出品公司

软件语言

Windows自带 Windows自带 InstallShield /

英文 中文

可选 中文

需要购买其他程序

是/否,可用于大是,试用需企业许可证

多数驱动程序安装

安装配置的复杂性 需Windows2000光盘

操作性

需下载VS2005简单

客户端

简单

复杂,用时长 复杂 简单,图形化操作简单,图形化操作界面

界面

支持平台 WinXp,

Win2003,

Win2000,

Win9x

WinXp,

Win2003,

Win2000,

Win9x

WinXp, Win2003, WinXp, Win2003, Win2000, Win9x

Win2000, Win9x

是否支持命令行

无需用户干预

是否受应用程序供是,如果提供 是,如果提供 不需要

应商支持

Windows

Installer

一次是否可以安装否

多个程序,包括文件和注册表设置

是否有可以免于编否

辑文本文件的智能向导驱动界面

GUI 工具是否有许否

多功能

否 是

否 是

否 是

VS2005

MSDN Library

不需要

显示客户是否已经不需要

完成安装或安装失败

是否能创建用于多是

台计算机的安装程序包,并能指定何时安装的条件

不需要 是,如果配置 是,如果配置

是 是 是

2.定制MSI文件常用工具

TALL Discover

找到Windows2000的安装光盘,双击下边的这个位置的文件:

在开始菜单的所有程序里边就多了“VERITAS software”组,点击运行里边的“VERITAS discover”就可以开始制作MSI文件了。

制作MSI文件的基本原理就是,在我们安装一个软件以前,先给电脑的磁盘拍个“快照”。然后将要安装的软件安装到电脑中,并对注册表等内容做修改,等到确认这个软件能正确运行后,再给电脑的磁盘拍个“快照”。Discover软件会自动找出两次“快照”的不同,并且生成一个MSI文件。最后,如果你愿意,可以使用VERITAS software组中的另一个工具:Veritas Software Console对这个MSI文件进行进一步的包装、调整,这样一个MSI文件包就生成了

(/)

b. Advanced Installer

Advanced Installer 是一款功能强大、可生成符合 MS Windows 认证的 Windows Installer 的 MSI

安装包制作工具,具有友好的图形用户界面,直观而且非常简单的界面,创建 MSI 文件包非常方便,

用户只需添加文件,修改名称,添加按钮就可以了,无需任何脚本方面的知识,并且生成的安装文件保证符合 Windows 最佳操作建议

主要特点

- 具有完全安装、注册和卸载组成你应用程序的文件、部件及资源的功能;

- 完全自定义 MSI 安装包 - 具有添加、删除文件及文件夹功能;

- 添加或移除内、外部文件或 URL 快捷方式;

- 添加或移除注册表键或项目;

- 添加或移除环境变量;

- 安装时可设置文件属性 - 只读、隐藏等;

- 强制安装完毕系统重启动;

- 支持使用 64 位 CPU 的系统中安装包制作;

- Windows 系统下安装过程完整日志;

- 支持 Java 应用程序;

- 支持合并模块的安装制作;

- 支持对话框编辑;

- 支持数据库安装;

- 可以自定义菜单快捷方式的安装位置;

- 支持安装控制面板小程序;

- 支持从安装前后的镜像中制作安装包;

- 可以导入其他 MSI 和 Visual Studio 工程

/dengpu/blog/item/

lShield AdminStudio

AdminStudio是InstallShield产品家族中的最高配置结构,用于Windows

Installer(MSI)的包装、重新包装、转移、程序冲突管理等。该产品可用于Windows

2000/Xp,进行MSI的包装和传统安装程序向MSI的转移,增强MSI 安装包的安全特征,解决安装程序包之间的冲突,同时管理项目工作流程。

adminstudio 使您可以迅速准备可靠 MSI 虚拟软件包,可以无差错地部署到任何操作系统包括windows vista.

。/langzhou/blog/item/

3.用 winIstalll Discover 制作MSI文件出现的问题及注意点:

a> 如安装了360安全卫士,在Discover执行第二次拍照时,会出现在存取及时被拒绝的错误,导致生成MSI文件不能继续执行。

b>在Discover 生成MSI文件时,会出现

c:、文件不能复制到生成MSI文件下的情况,可忽略继续生成。会生成的错误报告。

c> 生成的MSI安装文件,比较EXE安装文件,在安装时太过精简,安装完成后,在 开始—>程序栏 无快捷方式,也没有删除程序的快捷方式。需在VERITAS software Console中添加。

d> 关于 VERITAS software Console 对MSI的修改,可修改MSI文件的基本信息,可为安装文件添加、删除插件,可添加快捷方式,对于服务启动及注册表修改还不清楚。

4.用 Microsoft Visual Studio 2005 制作MSI文件:

a> 解决了 在 开始—>程序栏 添加快捷方式。

b> 解决了通过WINDOWS的标准的删除程序删除安装的程序:

方法一:

A、在安装项目目录中,创建一个新的 文件。

B、在安装项目中,复制“ProductCode”属性(一个类似

[12345678-1234-1234-1234-4] 的值)。

C、编辑 ,以便让其中一行包含以下内容(其中,ProductCode 是步骤 2 中复制的值):Msiexec /x ProductCode

D、将 添加到安装项目的应用程序文件夹。

E、右击 并选择“创建快捷方式”以创建快捷方式。

F、将快捷方式放在安装项目中相应的“开始”菜单文件夹中。

G、将快捷方式重命名为类似于“卸载程序”。

方法二:

在添加你的应用程序项目的时候,多添加一个进去,这个文件在c:windowssystem32文件夹下,添加进去以后,为了让他更像个卸载程

序,把他的名字改成""。

然后创建一个快捷方式,放到"开始-程序"中,接下来查找这个部署项目的ProductCode了,鼠标左键单击项目名称,然后点击属性标签,就可以看到ProductCode。 然后打开你创建的那个快捷方式的属性对话框,在Aguements属性中输入"/x {ProductCode}",,最后点击"生成解决方案"即可生成带有卸载功能的安装程序。

c> 未解决 安装完成要能自动启动服务 的功能。生成的MSI文件安装后,服务项添加到服务管理中成功,但服务不能自动启动。

tall Discover 命令介绍:

是Windows Installer的一部分。用于安装Windows Installer安装包(MSI)。所在路径:C: 。

安装选项及常见参数

<>

安装或配置产品

/a <>

管理安装 - 在网络上安装产品

/j <> [/t ] [/g ]

播发产品 - m 播发到所有用户,u 播发到当前用户

< | ProductCode>

卸载产品

/quiet

安静模式,无用户交互

/passive

无从参与模式 - 只显示进程栏

/q[n|b|r|f]

设置用户界面级别

n - 无用户界面

b - 基本界面

r - 精简界面

f - 完整界面(默认值)

/help

帮助信息

/norestart

安装完成后不重新启动

/promptrestart

提示用户重新启动(如果必要)

/forcerestart

安装后总是重新启动计算机

日志选项

/l[i|w|e|a|r|u|c|m|o|p|v|x|+|!|*]

i - 状态消息

w - 非致命警告

e - 全部错误消息

a - 操作的启动

r - 操作特定记录

u - 用户请求

c - 初始界面参数

m - 内存不足或致命退出信息

o - 磁盘空间不足消息

p - 终端属性

v - 详细输出

x - 额外调试信息

+ - 扩展到现有日志文件

! - 每一行刷新到日志

* - 记录所有信息,除了 v 和 x 选项

/log

与 /l* 相同

更新选项

/update <>[;]

删除产品的更新

/uninstall [;] /package < | ProductCode>

修复选项

/f[p|e|c|m|s|o|d|a|u|v] < | ProductCode>

修复产品

p - 仅当文件丢失时

o - 如果文件丢失或安装了更旧的版本(默认值)

e - 如果文件丢失或安装了相同或更旧的版本

d - 如果文件丢失或安装了不同版本

c - 如果文件丢失或较验和与计算的值不匹配

a - 强制重新安装所有文件

u - 所有必要的用户特定注册表项(默认值)

m - 所有必要的计算机特定注册表项(默认值)

s - 所有现有的快键方式(默认值)

v - 从源运行并缓存本地数据包

设置公共属性

[PROPERTY=PropertyValue]

参照/kb/314881/zh-cn

6. 调用命令行生成Visuial 项目、解决方案

命令行编译,针对2003,主要使用了这个文件,它位于“Microsoft

Visual Studio .NET 2003Common7IDE”目录下。

用法:

devenv [solutionfile | projectfile | ] [switches]

可以调用 devenv,用第一个参数指定解决方案文件或项目文件。也可以调用 devenv,使第一个参数作为要在编辑器中打开的任何其他类型的文件。如果提供项目文件,IDE 将通过在与项目文件相同的目录中查找与项目文件具有相同基名称的 .sln 文件,在解决方案的上下文中打开该项目文件。如果存在 .sln 文件,则IDE 将查找引用该项目的单个 .sln 文件。如果不存在这样的单个 .sln 文件,则 IDE 将创建一个具有默认 .sln 文件名的未保存的解决方案,而该默认文件名与项目文件具有相同的基名称。

命令行生成:

devenv /build solutionconfig [ /project projectnameorfile

[ /projectconfig name ] ]

可用的命令行开关:

/build

/project

生成指定的解决方案配置

指定生成项目而不是解决方案,必须指定 /build 才能使用 /project

/projectconfig

/out

/rebuild

/clean

/deploy

/run

/runexit

/command

/mditabs

/mdi

/fn

/fs

/LCID

/noVSIP

/safemode

/resetskippkgs

/migratesettings

指定要生成的项目配置必须指定 /project 才能使用 /projectconfig

将生成结果写入指定的文件

与 /build 类似,但先执行强制清理

清理生成结果

生成指定的解决方案配置然后部署它

运行指定的解决方案配置

运行指定的解决方案配置然后终止

启动后执行指定的内部命令行

使用选项卡式文档界面

使用 MDI 界面

使用指定的字体名称

使用指定的字体大小

使用指定的语言 ID

禁用用于 VSIP 测试的VSIP 开发人员许可证密钥

出于稳定性仅加载默认的环境和服务

允许曾被标记为加载失败的 VsPackages再次加载

迁移另一个版本中的某些用户设置产品特定的开关:

/debugexe 打开要调试的指定可执行文件。命令行的其余部分作为它的参数传递到此执行文件。

/useenv 使用 PATH、INCLUDE、LIBPATH 和 LIB 环境变量而不是使用

VC++ 生成的 IDE 路径。

若要从命令行附加调试器,请使用:

-p

提示:

你可以通过“开始菜单”->“程序”->“Microsoft Visual Stuido .NET 2005”->“Visual

Studio .NET 工具”->“Visual Stuido .NET 2005 命令提示”启动命令行操作窗口,其实就是我们平时通过cmd进入启动的命令行窗口,只不过你可以在下面直接使用devenv了,不必指出路径。

实践项目一:通过命令行编译整个解决方案

假设现在有这么一个解决方案,C:。在命令行状态下输入下列命令行,可以编译出此解决方案的Release版本,若要获得Debug版本,将Release替换成Debug即可:

devenv C: /build Release

实践项目二:通过命令行编译一个解决方案中的某个项目

假设现在有这么一个解决方案(C#),C:,它包含2个项目:一个是,另一个是,通过如下命令行可以编译Project1的Release版本:

devenv C: /build Release /project

C:

实践项目三:清理MFC解决方案

输入以下命令行将会清理该解决方案的Release版本:

devenv C: /clean Release

实践项目四:生成解决方案的同时,写入日志文件

如果要生成日志文件,可以简单地在命令行最后加上/out

devenv C: /build Release

/out C: