使用VisualStudio制作安装包(精)

更新时间:2024-04-01 15:09:01 阅读量: 综合文库 文档下载

说明:文章内容仅供预览,部分内容可能不全。下载后的文档,内容与下面显示的完全一致。下载之前请确认下面内容是否您想要的,是否完整无缺。

使用Visual Studio 制作安装包 殷海峰

2012年08月04日 变更记录

日期作者说明2012.08.04 殷海峰完成初稿 I 目录

第1章简介 (1 第2章后处理模块 (2 2.1 新建项目 (2 2.2 增加可重定位文件 (2 2.3 增加安装位置固定的文件 (4 2.4 编译 (5 第3章系统必需 (6 3.1 收集文件 (6 3.2 新建项目 (6 3.3 增加自定义文件夹 (6 3.4 设置部署位置 (8 3.5 设置部署条件 (8

3.6 卸载时不删除 (10 3.7 编译 (11

第4章MapX控件 (12 4.1 注册COM组件 (12 4.2 注册表 (13 4.3 编译 (14

第5章主安装项目 (15 5.1 新建项目 (15 5.2 增加系统必需 (15 5.3 增加后处理模块 (16 5.4 增加MapX控件 (17 5.5 增加应用程序文件 (18 5.6 创建快捷方式 (19 5.6.1 主程序快捷方式 (19 II

5.6.2 “卸载程序”快捷方式 (21 5.6.3 快捷方式的问题 (22 5.7 详述项目属性 (22

5.7.1 AddRemoveProgramsIcon属性 (24

5.7.2 InstallAllUsers属性 (25 5.7.3 Localization属性 (26 第6章杂项 (27 6.1 安装程序 (27 6.2 vdproj文件格式 (27 6.3 脚本 (28 6.4 点评 (28 6.4.1 优点 (28 6.4.2 缺点 (29 III 第1章简介 第1章简介

制作安装包的工具很多,本文只讨论如何通过VS2008来打包GISMapper Office程序。GISMapper Office需要安装的文件很多,大致分为如下几类:

1、后处理模块所需文件;

2、系统必需文件,如:mfc42.dll、msvcrt.dll…… 3、MapX控件所需文件; 4、BCGCBPro 界面库所需文件; 5、主程序。

为了便于复用,这些文件不会完全加到一个“安装和部署”项目里,而是将它们拆分成了若干子项目。每个子项目负责打包一组文件,最终合成一个安装包。

1

第2章后处理模块

后处理模块的文件分为两大类,一类文件要安装到Common Files目录下,另一类文件要和主程序(exe文件在同一文件夹下。

2.1 新建项目

使用VS2008新建一个名为Post的“安装和部署”项目,如下图所示:

图2.1 新建合并模块

注意:一定要选择“合并模块项目”。因为我们并不希望这个项目直接生成安装文件(*.msi和Setup.exe,而是希望它生成模块文件(*.msm供其它安装项目调用。

2.2 增加可重定位文件 2

新建项目后,可以看到下图所示的“文件系统”。如果看不到,请使用鼠标左键单击VS2008的【视图】【编辑器】【文件系统】菜单项。

图2.2 文件系统

“Module Retargetable文件夹”表示该文件夹下的文件安装到电脑上的路径不固定,是可以重新定位的。后处理模块所需的文件中,需要和exe文件在一起的文件可以放在这个“Module Retargetable文件夹”下。具体操作为:鼠标右键单击左窗格的“Module Retargetable文件夹”。在弹出菜单中,单击【添加】【文件】(或【文件夹】将需要的文件添加进来即可。

图2.3 增加文件或文件夹

也可以通过鼠标将文件或文件夹从资源管理器里拖放到上图的右窗格内,这样最简单。增加文件后,显示如下:

3

图2.4 增加文件后的显示 2.3 增加安装位置固定的文件

后处理模块的文件中,有一部分需要安装到Common Files目录下。一般情况下,这个目录位于C:\\Program Files\\Common Files。但也有特殊情况,如:系统盘为D的

Windows XP,这个目录就是D:\\Program Files\\Common Files。再比如:64位的Windows 7下,这个目录就是C:\\Program Files(x86\\Common Files。

首先,需要添加Common Files目录,其操作如下图所示:鼠标右键单击“目标计算机上的文件系统”,在弹出菜单中单击【添加特殊文件夹】下的【C ommon Files 文件夹】菜单项

图2.5 添加Common Files 文件夹

下图中,可以看到Common Files 文件夹已经被添加。可以在这个文件夹 4

里添加所需的文件和文件夹,具体操作可参考上一节的内容。

图2.6 添加Common Files文件夹之后的显示 2.4 编译

选择解决方案配置为Release,然后单击【生成】菜单下的【生成解决方案】或【重新生成解决方案】菜单项。VS2008将我们添加的文件编译打包至一个独立的文件——Post.msm,在Release目录下可以找到该文件。

msm文件是可以被其它“安装和部署”项目直接引用的,具体方法在后继章节里介绍。

5

第3章系统必需 第3章系统必需

GISMapper Office采用VC++6.0开发,因此一些文件是必需的,如:mfc 42.dll、msvcrt.dll……这些文件将被安装到电脑的System目录下,供多个程序共同使用。

3.1 收集文件

同样的mfc42.dll文件,在Windows 98、Windows 2000、Windows XP……是不同的。如果从Windows XP的System目录下(一般位于C:\\Windows\\Syst em32获得mfc42.dll,然后直接安装到Windows 98的System目录下(一般位于

C:\\Windows\\System,这个文件很可能是不能用的。因此,需要针对各种操作系统,分别搜集mfc42.dll。

Windows 2000 及其以上版本的 Windows,系统自带了诸如mfc42.dll、ms vcrt.dll……这些常见的文件,搜集起来很容易,直接到C:\\Windows或C:\\WinN T目录下查找,然后复制出来即可。

Windows 98 就比较麻烦了,系统没有自带这些常用的文件。只能安装V C++6.0或其它一些软件之后,到C:\\Windows目录下查找,然后复制出来。

建立三个文件夹:win98、win2000、winXP,将GISMapper Office需要的动态库文件(ATL.dll、mfc42.dll、msvcrt.dll、oleaut32.dll……从Windows 9 8、Windows 2000、Windows XP里复制出来,粘贴到各个文件夹内。

3.2 新建项目

使用VS2008新建一个“合并模块项目”,项目名称为SystemDll。具体操作请参考上一章的内容。

3.3 增加自定义文件夹 6

鼠标右键单击“目标计算机上的文件系统”,在弹出菜单中,单击【添加特殊文件夹】下的【Custom 文件夹】

图3.1 增加自定义文件夹

VS2008显示如下。请输入文件夹名称,如:win98,然后按下Enter键。w in98文件夹就被创建出来。

图3. 2 创建自定义文件夹 7

使用相同的方法再创建win2000、winXP文件夹,最后显示如下:

图3.3 添加文件夹后的显示

再把 Windows 98、Windows 2000、Windows XP 需要的文件分别增加到上图的 win98、win2000、winXP 文件夹下。具体操作请参考上一章的内容。

3.4 设置部署位置

我们希望win98、win2000、winXP这三个文件夹里的文件将被安装到目标电脑的System目录下。以win98文件夹的设置为例,其步骤如下:鼠标左键单击win98文件夹,然后设置DefaultLocation属性为[SystemFol der]。

图3.4 设置部署位置

使用相同的方法,设置win2000、winXP文件夹的部署位置。 3.5 设置部署条件 8

win98下的文件只能安装到Windows 98 或 Windows Me;win2000 下的 文件只能安装到 Windows 2000;winXP 下的文件只能安装到 Windows XP 及其以上版本的 Windows。这些需要设置部署条件。

鼠标左键单击win98文件夹,设置Condition属性为 Version9X >= 410。 这样win98下的文件只能被部署到Windows 98及Windows Me下。

图3.5 设置win98部署条件

请设置win2000的Condition属性为 VersionNT = 500。请设置winXP的Condition属性为 VersionNT >= 501。

需要说明的是:Version9X是Windows 9X的版本号,VersionNT是WinN T的版本号,它们都等于主版本号乘以100再加上次版本号。具体见下表: 表3.1 Version9X和VersionNT说明

操作系统主版本次版本Version9X VersionNT 95 4 0 400 Windows

Windows 98 4 1998 2398?

Windows 98第2版 4 10 410 Windows Me 4 90 490

Windows NT3/NT4 3/4 未知未知 2000 5 0 500 Windows Windows XP 5 1 501

2003 5 2 502 Windows Windows Vista和2008 6 0 600 6 1 601

Windows 7和2008 R2 9

需要说明的是,如果部署到Windows 7下,不要担心winXP文件夹下的文件会破坏Windows 7已有的文件。因为安装的时候,安装程序会比较文件的版本号,Windows XP文件的版本号比Windows 7文件的版本号低,因此不会覆盖。

3.6 卸载时不删除

System目录下的文件是公用的。卸载程序的时候,如果把mfc42.dll这些文件也删除掉,会导致其它程序不能运行。所以在卸载程序的时候是不能删除这类文件的,具体的设置如下:

鼠标左键单击win98文件夹,然后全选该文件夹下所有文件,最后设置这些文件的Permanent为True。这样在卸载程序的时候,这些文件就不会被删除了。使用相同方法设置win2000、winXP下的所有文件的Permanent属性。

图3.6

注意:在Windows 2000及其以上版本的Windows,System目录下的文件是有保护机制的。如:在Windows XP的C:\\Windows\\System32目录下搜索mf c42.dll,你会发现有两个这样的文件,如下图所示。如果有安装程序破坏、删除了

mfc42.dll,Windows系统会根据C:\\Windows\\System32\\dllcache下的备份恢复。

10

图3.7 文件保护机制3.7 编译

请编译生成SystemDll.msm,以备后用。 11

第4章 MapX控件

使用VS2008新建一个“合并模块项目”,项目名称为MapX。把需要部署的文件增加进来。

4.1 注册COM组件

MapX 5.00.30的安装文件中,有两个COM组件需要注册:MapX50.dll需要用 regsvr32.exe 注册;mdatasetint.tlb是类型库,需要用 regtyplib.exe 注册。

对于MapX50.dll请选择注册方式为 vsdrfCOMSelfReg; 对于mdatasetint.tlb请选择注册方式为 vsdrfCOM;

图4.1 注册属性

事实上,把文件增加进来的时候,VS2008一般情况下都能很好的判断出使用何种注册方式。不过一旦安装时发生组件注册错误的时候,请认真考虑该如何设置这一项。

12

4.2 注册表

安装MapX控件需要修改注册表。在本机上安装MapX之后,运行regedit. exe,进入注册表编辑器。导出HKEY_LOCAL_MACHINE\\SOFTWARE\\MapInf o\\MapX\\5.0至一个reg文件。

图4.2 注册表

VS2008里,单击【视图】【编辑器】【注册表】

图4.3 打开安装项目的注册表

可以看到将要部署到目标计算机上的注册表项目:

图4.4 安装项目的注册表 13

鼠标右键单击“目标计算机上的注册表”,在弹出菜单里单击【导入】菜单项,将本机导出的reg文件导入。这样就省去了一项一项增加注册表项目的麻烦。

往注册表里写入的内容并不是固定不变的。下面标有下划线、粗体部分是MapX50.dll的安装目录。

[HKEY_LOCAL_MACHINE\\SOFTWARE\\MapInfo\\MapX\\5.0] \\

5.0\\\\GeoDict.DCT\5.0\

\

问题是:现在无法知道MapX50.dll的安装目录,怎么办?请使用一个变量来代替吧,如:MAPXPATH,然后将上面下划线部分替换为[MAPXPATH]。具体的就是修改下图中CommonDLLDir、GeoDictionary、ProgramDir的Value属性,修改结果如下图所示。

图4.5 注册表里使用变量

注意:变量名MAPXPATH里不能有小写字母。

至于安装程序如何将MapX50.dll的安装路径传递给MAPXPATH,后面的章节将做说明。

4.3 编译

请编译MapX项目,生成MapX.msm,以备后用。 14

第5章主安装项目

这一章将搭建GISMapper Office的主安装项目。 5.1 新建项目

与前几章不同,主安装项目的项目类型为“安装项目”,如下图所示:

图5.1 新建项目类型

编译这种类型的项目,生成的将是最终的安装程序(*.msi和Setup.exe。 5.2 增加系统必需

现在把第3章生成的SystemDll.msm添加到主安装项目GMO里,其操作如下图所示。鼠标右键单击GMO项目,弹出菜单里单击【添加】【合并模块】,然后将SystemDll.msm添加到GMO里。

15

图5.2 添加合并模块 5.3 增加后处理模块

再把第2章生成的Post.msm添加到主安装项目GMO里,具体操作不再赘述。 假定安装过程中,用户选择安装目录为C:\\Program Files\\Dacel\\GISMappin g Office 3.0,这个目录就是TARGETDIR。Post.msm里处于“Module Retarge table文件夹”文件夹下的文件默认将被安装到TARGETDIR。

现在的问题是:GISMapping Office的主程序将安装到TARGETDIR\\Bin目录下,而Post.msm里的文件必须和主程序在同一文件夹下,即Post.msm里的文件也必须安装到TARGETDIR\\Bin目录,此时该怎么办?

在GMO安装和部署项目里,新建一个自定义文件夹Post,具体方法请参考第3章第3节。设置Post文件夹的DefaultLocation属性为[TARGETDIR]\\Bi n,如下图所示。

16

设置合并模块Post.msm的属性,指定可重定位文件夹的具体位置,如下图所示。如果Post.msm有多个可重定位文件夹,则MergeModuleProperties里也会有多个对应的文件夹。

图5.3 设置Post.msm属性

现在,Post.msm里的文件都将被安装到[TARGETDIR]\\Bin,可以和主程序在同一个目录了。

5.4 增加MapX控件 17

再把第4章生成的MapX.msm添加到主安装项目GMO里。创建自定义文件夹MapX,重定向MapX.msm到MapX。MapX文件夹的设置如下:

图5.4 MapX文件夹属性

DefaultLocation属性就不用解释了。Property属性很重要,安装程序会将D efaultLocation的实际路径传递给Property属性指定的变量里。这里就是将[TAR GETDIR]\\MapX5.00.30这个目录传给变量MAPXPATH。MapX.msm这个模块里根据MAPXPATH修改了注册表,详细信息请参考第4章。也就是说:主安装程序与合并模块通过Property属性来交换信息,所以Property属性很重要。

5.5 增加应用程序文件

将应用程序所需文件加入到 GMO 安装和部署项目中来,如下图所示。

图5.5 增加应用程序文件 18

BCGCBPro 界面库所需文件可单独放到一个Custom文件夹内(上图中的BCG文件夹,然后指定该文件夹的DefaultLocation属性为[TARGETDIR]\\Bin,这样这些文件就会和主程序文件一起被安装到目录[TARGETDIR]\\Bin。

主程序文件及相关的一些文件,可以增加到上图中的“应用程序文件夹”,它的DefaultLocation属性就是默认的安装目录,即TARGETDIR。应该对其进行设置,如下图所示:

图5.6 应用程序文件夹的属性

上图中的ProgramFilesFolder表示程序目录,一般就是C:\\Program Files\\。ProductName表示软件产品名称,这个是主安装项目的一个属性,是可以设置的。

5.6 创建快捷方式 5.6.1 主程序快捷方式

现在要在开始菜单中,增加主程序的快捷方式。其操作步骤如下图所示:鼠标左键单击“用户的“程序”菜单”。然后鼠标右键单击右窗格,在弹出菜单中单击【创建新的快捷方式】菜单项。

19

图5.7 创建快捷方式

VS2008显示如下界面,请在这个界面里选择“应用程序文件夹”下的Bi n文件夹里的主程序文件GMOffice.exe,然后单击“确定”按钮。

图5.8 选择快捷方式的目标文件

请修改这个快捷方式的Name和Icon属性,如下图所示: 20

图5.9 快捷方式属性 5.6.2 “卸载程序”快捷方式

现在要增加一个卸载程序的快捷方式,用户单击它之后就可以卸载GISMa pper Office了。它的原理就是调用程序 msiexec.exe,并给这个程序传入参数:

/x[ProductCode]。MSI安装程序为每个软件都起了一个独一无二的产品代码(P roductCode,如:msiexec.exe /x{34DB9720-A27B-4F57-8057-13438DB86BD5}将卸载产品代码为{34DB9720-A27B-4F57-8057-13438DB86BD5}的软件。

主安装程序里,有这个ProductCode。鼠标左键单击解决方案资源管理器中的项目名称,在属性窗口将能看到ProductCode属性:

图5.10 ProductCode属性

既然要用到程序msiexec.exe,就要将其加入安装项目。需要注意的是:不能增加 Windows XP 的msiexec.exe,而应该增加 Windows 98 系统目录下的msiexec.exe。Windows的向下兼容使得这个程序能在多数Windows下运行。

21

创建一个快捷方式,其操作步骤请参考上一节内容。配置这个快捷方式的属性如下:

图5.11 “卸载程序”快捷方式的属性 5.6.3 快捷方式的问题

一个不幸的消息是:VS2008制作的安装包在安装程序后,快捷方式是有问题的:一旦被安装的文件发生了改变,它就会再运行一次安装包进行修复。如果安装包被删除了,这个快捷方式根本无法运行!

解决方法就是使用OrcaMis程序,修改msi文件的快捷方式(Shortcut的目标(Target属性。如下图所示:

图5.12 修改msi文件的Shortcut 5.7 详述项目属性

鼠标左键单击解决方案资源管理器中的项目名称,在属性窗口将能看到该

22

项目的属性,如下图所示:

图5.13 安装项目属性

在资源管理器里,可以查看msi文件的属性。上图的Title、Author、Key words、Description分别对应下图的标题、作者、关键字、备注。

23

图5.14 msi文件属性

5.7.1 AddRemoveProgramsIcon属性

通过“控制面板”下的“添加或删除程序”也可以删除安装好的 GISMap per Office。这个属性是用来设置下图中的图标的:

24

图5.15 删除程序里的图标 5.7.2 InstallAllUsers属性

在 Windows NT 下安装程序,快捷方式的位置有两种选择:

图5.16 InstallAllUsers属性

25

如果选中了“只有我”,则快捷方式将被创建在如下目录。???表示安装程序时登录Windows的用户名,这样这个快捷方式只有这个用户能看见。

C:\\Documents and Settings\\???\\「开始」菜单\\程序

如果选中了“任何人”,则快捷方式将被创建在如下目录。这样这个快捷方式可以被所有用户看见。

C:\\Documents and Settings\\All Users\\「开始」菜单\\程序

InstallAllUsers属性为TRUE的时候,默认选择“任何人”,否则选择“只有我”。 5.7.3 Localization属性

用来指定安装程序的语言属性。如果选为English,则安装程序显示的将是英文。这个属性为安装程序的国际化带来了便利。

26

第6章 杂项 第 6 章 杂项 6.1 安装程序 使用 VS2008 编译生成的安装程序主要有两个, 一个是 msi 文件, 一个是 e xe 文件。msi 文件是 Windows Installer 的数据包,运行 msi 文件的实质是运行 Windows Installer 程序,然后打开 msi 文件进行安装。 文件用于检查安装环 exe 境,如是否需要.NET framework 3.5?如果需要就调用.NET framework 3.5 的 安装程序进行安装。如果 msi 不需要其它的安装项,则 exe 文件是可有可无的。 6.2 vdproj 文件格式 vdproj 是 UTF-8 编码的文本文件,可以使用记事本打开。 \表示 Visual Studio 的版本。 每个变量都是 VARIANT 类型的,3 表示数据类型,具体含义见如下定义 (定义节选自文件 C:\\Program Files\\Microsoft Visual Studio\\VC98\\Include\\WT YPES.H) : enum VARENUM { VT_I2 = 2, VT_I4 = 3, VT_R4 = 4, VT_R8 = 5, VT_CY = 6, VT_DATE = 7, VT_BSTR = 8, VT_BOOL = 11, VT_I1 = 16, VT_UI1 = 17, 27

第6章 杂项 VT_UI2 = 18, VT_UI4 = 19, VT_I8 = 20, VT_UI8 = 21, VT_INT= 22, VT_UINT }; \中的 3 表示它是一个 4 字节的整数(VT_I4,其值 为 800。 Visual Studio 2002 的版本为 7.0,这个数值为 700 Visual Studio 2003 的版本为 7.1,这个数值为 710 Visual Studio 2005 的版本为 8.0,这个数值为 800 Visual Studio 2008 的版本为 9.0,这个数值应为 900,但它却是 800,也 就是说 vdproj 对于 VS2005 和 VS2008 是通用的。 = 23, 6.3 脚本 有些打包软件如 Install Shield 提供了脚本语言, 可以对安装过程进行控制。 VS2008 提供了自定义操作(Custom Actions)的功能。可以编写 dll、exe、VB 脚本、JAVA 脚本来实现自定义操作。如果以后打包需要,可以进行深入的研 究。具体请参考 MSDN2008 里的 Custom Actions。 6.4 点评 6.4.1 优点 1、操作比较简单; 2、通用性强,制作的安装包可以在各种 Windows 上运行; 3、切换安装语言比较方便; 4、对新的 Windows 支持比较及时,如: “Program Files (64 位文件夹” ; 5、通过合并模块实现了打包结果的复用。 28

第6章 杂项 6.4.2 缺点 1、快捷方式的问题。打包之后使用 OrcaMis 修改 msi 文件非常的不方便; 2、经笔者测试发现,使用 Visual Studio 2002、2003、2008 制作的合并模 块是有 BUG 的:由这些模块制作而成的安装包,在 Windows XP 下安装时不 能修改安装目录。Visual Studio 2005、2010 制作的合并模块,不存在这样的 B UG; 3、将过多的信息写入注册表。msi 安装程序会将每个安装文件都编一个 G UID,安装时会将相关信息写入注册表; 4、编译速度有点慢。 29

本文来源:https://www.bwwdw.com/article/cgjr.html

Top