1 说明(适用范围)
阅读对象:IS的初用者;本指南的校对、补充、修改者。
适用版本:IS10~IS11,如果您使用的不是这个版本段的版本,那么还是不要再往下看了。
目的 :帮助初用者建立一个简单的安装包,能在建立这个安装包的过程中了解IS的基本情况。
强调 :本指南不会对IS中的每一个菜单进行介绍,只对用到的做一个初步讲解
2 IS介绍2.1 IS介绍
这个东东据说是现在使用最广泛的安装包制作工具。它是从共享软件出身,一直发展到一个商业软件。现在又被收购了。我是从6.22版本开始接触它的。从6.0到9.0版本,它的每一个版本大概都分为三个系列,就如同操作系统WINDOWS XP一样,每一个版本都分为Professional,Express,Developer。简单的可以这样解释(详细区别大家可以到网上搜,应该很多):
Express功能最少,使用也最简单,据说是限制使用脚本功能等。适合制作常规的安装包,本人没有使用过。
Professional开放的功能较多,包括脚本功能。但还是有一些限制,我了解的就是无法编辑界面(罕见使用),缺少一些外部库等等。
Developer不用说是最全的了。适合于能折腾的人。
从10版本开始,IS最大的变化就是界面变了。变的花哨了许多,功能更多了。让我人最感兴趣的就是增加了对SQL的支持,最终加入了对XML的支持。而且,从10开始,名字也有些改变:Premier Edition对应原来的Developer,其他的还是和原来一样。
以下的介绍全部是针对Installshield Premier Edition11的,请大家务必注意。
2.2 IS各工程介绍
IS将安装工程根据工程的特点分了几大类:InstallScript ;Windows Installer;Universal installer。其中,Universal这个比较好理解,大概就是用来做跨平台的安装程序。InstallScript和Windows Installer的区别,我到是一直不是很清楚,大概意思就是如果你使用InstallScript模式是使用脚本来驱动安装界面,使用Windows Installer则主要是使用操作系统自带的安装服务来驱动安装。在每个大类里面有划分了不同的小类。这里请参考IS帮助中的说明。
3 COMMON篇之InstallScript Porject
3.1 使用向导做一个简单的安装包
3.1.1 了解你要安装的程序
首先你要清楚,你的程序所需要的运行环境要求。
这个安装包例子中,我们假设我们要打包这样一个系统:主程序是ISsample.exe,ISsample.dll,ISsample.chm;它运行时需要读取当前目录下的ISsample.ini,还需要调用系统目录下(windows/system32)ISsample_sys.dll这个动态库,由于这个程序是用VC6开发的,所以还需要运行的机器上有vc6的运行库。具备了这个环境,ISsample.exe程序才能正常运行起来。
这就要求我们做好的安装程序安装时要将ISsample.exe,ISsample.dll,ISsample.chm,ISsample.ini拷贝到指定的安装目录,再将ISsample_sys.dll拷贝到当前系统的系统目录(windows9x中系统目录是windows/system;windows 2000/xp的系统目录是system32)。同时要实现安装的时候将VC6的运行库安装到目标机器上;其中帮助文件ISsample.chm是可选择安装的。下面我们来试着做这个安装包。
3.1.2 建立一个InstallScript工程
启动IS11,在主窗体中选择“Create a new Project”
InstallShield 2008的创建新工程
点击OK后,进入IS的工程向导。在IS的向导中,向导会引导你依次设置工程的各项属性值,下面我们就一步一步的来解释每一步的内容。执行向导,你只需点击界面右下脚的即可。以下的描述就是按照步骤进行解释的。
3.1.3 程序信息
这个界面就不需要解释太多了吧,大家只要看里面的参数应该就可以明白了。
3.1.4 安装包结构
这一步是设置我们的安装包的主体结构的。主要设置安装包中有多少安装项目。在这个界面中,我们选择要定制我们的安装包,点击“yes”单选框后,Installstion Architecture列表框激活,在这里,我们可以通过“New”按钮来创建一个新的安装项目(也就是我们在后面会经常说的Features),通过“Rename”按钮来改变这个Features的名字。通过“Set Default”按钮来设置某一个Features是默认选择安装的(不过这个功能这里一般不用去注意它,到后面我们还要重新选择)。
这里解释一下 Features:可以这样简单的理解,大家都安装过程序,在安装过程中,如果你选择了定制安装,一般的安装程序都有这样如图的提示:
我们设置的Features就是在安装时这里出现的选项。也就是可选择的安装项目。
在这个例子中,我们根据原来的设想,按照整个安装包的文件组成创建三个Features:Program files,Help Files,Sys Files。(尽管这样的分有个小问题,后面我们会来提出并解决)
3.1.5 指定安装的文件已经目标路径
在这一步中,我们通过界面来指定我们要安装的文件,并且设置这些文件将要安装到的目标路径。具体的操作步骤如下:
在All Application Data下拉列表中选择前面确定的类别,确定该类别中所有的文件默认的安装路径。这里我们定为默认的安装路径为c:\Program files\Issample,所以,在路径窗口中,选择“Program Fils”项,在该项上单击右键。从给出的菜单中选择“New Folder”创建一个Issample目录。然后,点击界面右测的“Add Files”按钮,添加ISsample.exe,ISsample.dll,ISsample.ini三个文件。
|
再次在All Application Data下拉列表中选择“Sys Files”项,在路径窗口中选择Windows下面的“Windows system”目录,添加ISsample_sys.dll文件。
这样,通过以上设置,确定了如下的默认安装结构:
第一:我们分别给三个Features指定的默认的安装路径,“Program files”“Help Files”的默认安装目录是c:\Program Files\ISsample(假设目标机器的操作系统在C盘);“Sys Files”的默认安装路径是c:\windows\system32(假设目标机器的操作系统在C盘,且系统路径是windows,如果操作系统是9X的话,system32会自动替换为System)。
第二:我们分别给三个Features指定了关联的文件
在添加文件过程中,会出现一个提示对话框,询问你是否对当前添加的文件进行扫描,来发现这些文件运行时是否依赖于一些标准的类库文件,如果你确定的话,之后会弹出一个向导来协助你完成对你添加文件的扫描。这个问题我们会在后续的文档进行专门的交流。这里全部点击NO.
3.1.6 添加第三方组件
由于我们这个例子程序假设了我们的程序正确运行时需要VC6的动态库文件,所以要添加这一组件。添加这个组件的操作我们不在这里完成,这一步先暂时跳过。点击下一步。
3.1.7 创建程序启动的快捷方式
进入这一步后,IS会自动为我们创建一个快捷方式。这个快捷方式将被创建在开始菜单中,如果想要在桌面上也创建一个,那么把“Create shortcut on Desktop”的复选框也选上即可。关于更详细的快捷方式的创建,我们在后面的修改步骤中介绍,这里也不进一步解释了。
3.1.8 注册表操作
某些程序会要求在注册表中进行某些修改或添加某些关键的值,可以在这里进行一些简单的加添工作。我们这个例子中,暂时不涉及注册表部分,请关注论坛中相关讨论。
3.1.9 简单的对话框选择
这一步骤可以选择几个安装过程中出现的对话框,如下图。其中需要解释的就是第一个,安装许可协议对话框。这个对话框允许你的协议内容存放在一个txt文件中,然后只要关联这个协议文件就可以了,如下图中红色线所标注。
在这里,我们暂时默认选择给出的全部对话框。具体的修改,添加,删除我们在后面进行详细解释。
3.1.10 安装包界面语言的选择
在安装IS时,就有一个选择,让你安装什么语言包。如果你选择了中文的话,这里就会出现Chinese(Simplified),把这项选中即可。如果你这里出现的是英文,请暂时选择英文,以便能继续往下进行,至于如何更改语言包,请到论坛里进行咨询,我们也在后续的文档中进行解释。
3.1.11 选择安装包的格式
IS可以提供安装包发布的多种格式:简单的可以这样说IS可以根据你发行的要求将你的安装文件打包成不同的形式。单文件形式就是把所有的安装文件做成一个可执行文件,适合于安装包比较小,并且经常在局域网内共享。WEB形式就是IS不但将安装文件打包成一个单一的文件,而且还形成一个下载页面,这种形式也是适合于小的安装包。CD-ROM形式是我们最常用的形式,IS将我们的安装文件按照光盘的大小进行分包,如果你的安装包很大,超过了一张光盘的容量,你就会发现IS已经为你进行了按光盘打包,这样的安装文件在安装时会提示你插入下一张安装光盘。IS还可以按照你自己指定的大小进行分包制作。这些我们在后面进行讲述。
在这里,我们选择CD-ROM。然后点击编译按钮,进行全部编译。当看到编译日志中显示0个错误,那么我们这个简单的安装包基本上就制作完成了。再经过简单的修改就可以发布了。
3.2 修改这个安装包
通过上面的操作,也就是通过IS的“Project Assistant”,我们可以完成一个简单的安装包,或者说可以完成安装包的大体结构。下面我们通过修改这个安装包来进一步熟悉一下IS的大体功能。紧接上面的操作,点击下图中红色标记出的标签页。
实际上,前面我们做的这个例子是通过IS 提供的向导一步步引导我们将要安装的文件,以及安装信息添加到IS指定的部分,如果我们对IS熟悉了以后,我们也可以不通过向导而直接进入这个界面进行操作。通过下面的操作,大家可以看到我们前面做的工作所对应的IS实际的位置。
3.2.1 修改文件部分
前面的例子安装包中,我们通过向导将整个安装文件分为了三部分:Program Files;Help Files;sys Files。原本考虑这样的分法比较清楚:程序主文件,帮助文件,还有要拷贝到系统目录的文件,其中Program Files和Help Files是安装在同一目录下的。但是这样的分法在安装时就出现了问题。如安装时,选择定制安装,问题如下图:
在定制安装时,出现的选择画面中,我们定义的三个部分(Features)出现了。这样,我们就可以选择只安装其中的个别部分,例如,我们可以选择不安装Sys files部分的文件,但是这个部分文件是程序正常运行所必须的。所以,这样的分法有问题,会造成程序无法正常运行。这就要求我们安装时的选择画面中只能出现两个:主程序文件和帮助文件,而且在主程序文件中,有两部分的文件要在安装时拷贝到不同的目录:用户选择的路径和系统路径。
在IS中,安装的最新单位是Components,安装文件是归属于Components的。而Componets又归属于Features。我们点击Organization-->Setup Design,可以在右侧窗口看到我们原来创建的Features下,IS自动为我们创建了Components,这些Components里连接了我们指定的安装文件。
Components有一个很重要的属性,就是目的地(Destination)。所以相同安装路径的文件可以在不同的Components中,但是,不同安装路径的文件决不能放在同一个Components中。我们点击Setup Design下的任意一个Components(比如Help Files下的Files1),来看一下Components的具体属性设置。这里面最关键的两个属性一个就是Destination,设置这些文件的安装路径,另外一个就是Overwrite,设置当目的地存在相同文件时的覆盖规则。
点击Destination项后面的值一栏,出现下拉按钮,从中选择这个Components的默认安装路径。这里系统默认为<PROGRAMFILES>\Issample,这个路径是我们在前面通过向导时指定的(参考3.1.5)。<PROGRAMFILES>表示IS的系统变量,指目标操作系统的Program Files目录,后面的“\Issample”是要在安装时创建的子目录。如果用户在安装时没有选择定制安装,那么安装路径就被默认为c:\program files\issample(加入目标机器的系统在C盘)。
了解完这些后,我们要做我们的修改,就是要删除Sys files这个Features,把它原来关联的文件移动到Program Files这个Features下面,但安装路径却是系统路径。
我们在Setup Design窗口中,在Sys files上面点击右键,选择删除,这时候,Sys files这个Features被我们删除,但是它下面的File2这个Components并没有被删除(实际会删除)。我们继续在Program Files上面单击右键,选择“Associate Components”,这样,IS会列出目前不属于这个Features的所有Components。以上蓝字不适合installshield 2008版本。直接拖动File2到Program Files这个Features下面即可。
我们选择“File2”
检查一下File2的Destination属性,是否是系统目录。
同样,我们也可以直接在在右键菜单中选择“New Component”来新建一个Component,然后在Component中的“Static file links”中添加安装文件。
3.2.2 增加VC6动态库
选择Application Data-->Objects
在这个界面中,找到Mc runtime Library 6.0这个组件,将它拖动到下面窗口中的Program Files上面。这样做的目的就是在安装Program files时,才安装这个组件。 拖动到目标上后,释放鼠标左键,会弹出一个对话框,要求我们选择安装这个组件时的安装界面如何显示,一般默认即可。
3.2.3 增加桌面启动快捷方式和删除快捷方式
通过向导,我们已经在例子中创建了一个快捷方式,参考3.1.7。我们可以打开System Configuration-->shortcuts 中看到,我们已经在“开始-程序”的位置创建了一个company_name这样一个文件夹,再看右侧的属性框,里面定义了,这个文件夹安装好后显示的名字叫“IS交流组”,在下面又有一个子文件夹“Issample”,在这个里面,才是真正的快捷方式ISsample.exe,
其对应的程序文件“<PROGRAMFILES>\Issample\ISsample.exe”。为了说明快捷方式的创建,我们在创建一个快捷方式,让其安装后,产生在桌面上。
在Shortcuts-->Desktop上面点击右键,选择“new shortcuts”,随后,系统给出选择窗口。
这个选择窗口是让我们选择快捷方式所对应的那个程序文件。所以,我们双击“Program files”,在它的下一级,我们看到了我们创建的“Issample”目录,再双击这个目录,看到了程序文件“Issample.exe”,选种这个可执行程序文件,点击open后,一个生成在桌面上的issample.exe的快捷方式就创建完毕了。
回到主界面,我们看到刚创建的快捷方式命名为“New shortcut1”并处于可修改状态,系统要求我们给这个快捷方式起个识别的名字(任意),注意,这个名字是IS系统自己识别的,并不是安装好后在桌面上显示的名字。选择这个New shortcut1,在右侧我们来修改它的关键几个属性。其他的属性请参考IS的帮助。
Display Name:安装后显示的名字,双击后面的值域,进行修改。其中{ID_STRING2}是系统自己的标识符,双击后消失,可不用理会。
Target:快捷方式对应的物理文件。可点击值域,激活修改。
Icon File:快捷方式可以指定一个图标,这里是用来指定包含所需图标的图标文件。
Icon index:一个图标文件中可以包含多个图标,从0开始依次用编号来区别,第一个图标编号是0。
Working Directory:这个比较关键,是指快捷方式对应的可执行程序运行时默认的工作路径。有的程序运行时需要调用某个目录中的特定文件,指定了这个目录,程序就自动会在这个“工作路径”下面去搜索。如果不指定这项,某些程序无法正常运行。
Component(s):这个快捷方式是属于那个Componest,当指定后。如果这个component所属的Features没有被选择安装时,相应这个快捷方式也不会被创建。
这样看下来,删除的快捷方式道理也就是一样了。IS中,InstallScript Porject这个类型的工程的安装包的卸载方法就是再次调用一次安装程序,安装程序发现这个安装包在本机上已经被安装过一次后,就自动弹出选择画面,询问是否更新或者卸载。所以,卸载的快捷方式只需要注意两点:一是你的卸载快捷方式出现在哪里;二就是快捷方式属性的设置,这里,我把IS帮助文件中所提到的属性设置列出,大家也可以用“Creating Uninstallation Shortcuts for InstallScript Projects”作为关键语句,在帮助中进行检索。
ShortcutProperty |
Value (InstallScript project) |
Value (InstallScript MSI project) |
Arguments |
(None) |
/M{Product Code} |
Advertised |
(Not applicable) |
No |
Target |
<DISK1TARGET>\Setup.exe |
[CommonFilesFolder]InstallShield\Driver\10\Intel 32\IDriver.exe |
那么可以看到,删除的快捷方式的创建,只要创建一个新的快捷方式,把Target属性设置成为<DISK1TARGET>\Setup.exe即可。这是一种最简单的方法。但个人认为不是最好的,其他的卸载方式,请大家关注论坛和QQ群里面的讨论。
补充内容
4.添加uninstall快捷方式郁闷了N久.
其实installshield本身已经自带uninstall程序.在你安装自己打包的程序时installshield会在C:/Program Files/下创建一个InstallShield Installation Information文件夹,下面再有一个{DE407BEB-F8AD-475F-AB69-73590C37D34F}的文件夹.DE407BEB-F8AD-475F-AB69-73590C37D34F是你程序的GUID 在General information-->product property-->product GUID可以看到..此文件夹下面有反安装程序.只要在setup动行的时候加一个 -uninst的参数就变成了卸载程序
知道这个就好办了.添加一个快捷方式.把路径指(target)定为<PROGRAMFILES>/InstallShield Installation Information/{DE407BEB-F8AD-475F-AB69-73590C37D34F}/Setup.exe,DE407BEB-F8AD-475F-AB69-73590C37D34F是你的GUID 自己手动替换一下.改一下Arguments参数为:/uninst
3.2.4 脚本的简要解释
关于IS的脚本,我们如果只是普通的安装的话,并不是很复杂。我们选择的是InstallScript project这中安装工程,IS的script起的是主线的作用。也就是说,IS是根据内部的脚本一次执行各个环节进行安装。那么IS的脚本顺序到底是怎么执行的呢?我们选择Behavior and Logic-->InstallScript,在中间窗口,我们看到了脚本文件Setup.rul,我们点击这个文件,发现在右侧的窗口中几乎没有任何脚本。这不是说明目前没有脚本,而是IS通常情况下并不显示脚本出来,如何显示脚本的问题我们先暂缓,先来了解一下IS是按照什么顺序来执行脚本的。
IS 有很多的固定函数,这些函数在特定的安装阶段被执行。我们在脚本窗口的上部,可以在第一个下拉列表中看到这些 IS 内部定义的阶段。 IS 就是按照这样一个阶段顺序执行的。而每一个阶段包括了许多函数,这些函数完成特定的功能。我们选择一个阶段,在后面的下拉列表中就可以看到这个阶段下的所有函数。选择其中一个函数,在脚本的窗口中,就会显示这个函数的具体内容。比如,这里我们阶段选择“ Befor Move Data ”,函数选择“ OnFirstUIBefore ”,因为,对于一般的修改,这个函数是最主要的。在这个函数的脚本中,我们可以看到,函数开始处,是详细的对这个函数在什么时候被调用执行的解释。
这时候,如果你 选择最初的阶段“initialization”的第一个函数“OnSetTARGETDIR”,那么你会发现在OnFirstUIBefore的函数体下面,出现了OnSetTARGETDIR的函数体,这并不是说先执行OnFirstUIBefore,后执行OnSetTARGETDIR,函数的执行顺序和显示的顺序无关,对于初次接触IS的人来说,这点千万分清楚。函数的执行顺序是已经固定的。
3.2.5 通过脚本来实现安装界面的增加和减少
这里我们解决的问题是去掉安装时需要输入用户和公司信息的界面。
上面的安装例子中,运行时需要输入用户和公司信息,在这个例子中是多余的。我们来把这个界面去掉。当然其中一个方法就是回到向导中去掉这个界面的选择,这里我们主要是讲如何在脚本中去掉它。
在3.2.3中,我们把OnFirstUIBefore的代码显示出来了。这个函数里主要完成的就是在正式移动文件前,依次显示的那些对话窗口。
|
在OnFirstUIBefore函数中,我们找到如下脚本:Dlg_SdregisterUser这段脚本就是实现调用SdRegisterUser对话框,并把用户在界面输入的用户名和公司名放在了szName和szCompany变量中。我们要去掉这个对话框,在确保这个对话框所保存的变量值没有被其他函数调用后,首先直接注释掉Dlg_SdregisterUser这段代码,就可以实现去掉这个对话框;其次,特别强调的是,它的下一个对话框中有一个返回上一步按钮,见上图中的标记,这里,我们要把调转语句(goto)后面所指定的Dlg_SdregisterUser,改为上一个对话框Dlg_SdLicense2。
3.2.6 重新制作安装包
制作安装包时,向导的最后一步就是编译最终的安装包,但是向导中提供的设置比较少,所以我们有必要来重新手动编译一次,来了解一些详细的设置。
点击MediaàRelease;我们会在IS中间的那个窗口中发现Releases下面已经生成一个以CDROM-IMAGE命名的安装包编译项目,这个就是我们在向导中选择了CD-ROM类型后,由向导自动编译生成的。
我们在CDROM-IMAGE上面击右键,在菜单中选择delete,删除这个编译项目。然后在上一级,也就是根目录Releases上面点击右键,在菜单中选择“Release wizard”,使用创建向导,在向导的界面上点击下一步
在New Release Name中,输入这 个编译项目的名字,可以任意起。然后点击下一步。
这里选择你的安装包的载体类型,如果你的安装包是用光盘来发放的,那么首选CD-ROM,如果你想自己定义安装包分包的大小,那么选择Custom,然后输入每一分包的大小。这里我们选择CD-ROM。
下一步可以把整个包创建成一个可执行文件。我是从来没利用过。直接NEXT:)
在这一步,可以为你的安装包加个密码,别人安装的时候,需要输入密码。
选择安装包可支持的操作系统,我一般是默认第一项。
选择安装包的语言包。这个如果前面设置正确(包括安装IS时),这里不用改动。
选择安装包包括的Features,这个我目前也是不清楚为什么会出现这个选项,感觉多余。默认。
选择安装文件在安装包中存在方式:压缩、非压缩。或者指定部分压缩。
选择第一项:压缩。如果现在第二项,则你的安装文件会直接显示在安装包中。
IS 10提供了皮肤功能,这里选择是否使用皮肤。默认第一项,不使用。
以下各步骤全部默认,直至完成,IS开始编译。生成新的安装包编译项目,并编译成安装包。
IS生成的安装包存放在它自己默认的文件夹中,找起来不方便。我们可以在这里修改一下,每次编译后让IS将编译好的安装包拷贝到指定的一个目录。
此文在网上转载太多,已无法找到源头。