本篇文档主要分下面的6个部分内容:
创建,编译,测试安装的工程 设置快捷方式以及修改注册表 注册COM组件 Conditions and Properties 使用脚本修改安装程序 修改安装界面 下面我们来一步一步地跟我来学习如何制作安装程序
这一部分主要讲述如何快速的创建一个安装Project。
1.1创建一个安装的工程
首先来看看InstallShield8.0的开发控制台界面,熟悉一下开发环境。
图1
我们可以从文件菜单中选择开始一个新的工程向导,或者可以直接从工具栏中选中开始一个新的工程向导按钮,更直接的就是单击控制台界面上的Start the Project Wizard超链接即可弹出一个创建新工程的对话框如图2,你可以安装提示一步一步地往下走就是了。
图2
单击下一步,给我们的工程设置名称,见图3
图3
在上图中,当你输入一个工程的名字并单击下一步的时候,向导就会创建一个ProjectName.ism,被例子中则创建了liqiang_test.ism文件,你在IDE中对工程所做的设置都保存在这个文件中,如果你想将你的工程移植到其他机器上,你只需要将.ism文件复制到其他机器上即可。
单击下一步,选择安装工程的类型,见图4
图4
这个属性页允许你选择创建工程的类型,这里我们选择了InstallScript MSI Project,这种类型的安装程序使用脚本来驱动安装界面,使用windows installer来改变目标系统,比如添加文件,创建快捷方式,修改注册表,关于InstallScript MSI Project和Basic MSI Project两种方式详细的区别,你可以参考帮助文件。
单击下一步,设置应用程序的信息,图5
图5
你在Application Name中填写的应用程序的名称会出现在安装对话框中,并且你在控制面板的添加和删除程序对话框中显示的名称也就是这个名称。
还有一个就是设置安装路径,默认的情况下都是安装到C:\Program Files下,但是有一些例外,比如有的系统盘不在C上,为了使安装路径可以动态改变,installshield提供了ProgramFilesFolder属性,这个属性的值在安装的时候动态的初始化为目标系统的Program file 目录。
单击下一步
图6
这个属性页用来选择是否采用Installshield update service 自动地给你的用户发送更新消息,这里我们没有选择。
单击下一步,填写关于你们公司的信息
图7
填写公司的名称和电话,网址等
单击下一步,选择语言
图8
单击下一步,添加Features,见图9
图9
我们将缺省的Features删除,添加ProgramFiles and HelpFiles两个Features。
当你的安装程序很多情况下,可以通过这个属性页将你的所有的安装程序分组,然后在安装的过程中,用户可以选择自定义安装方式来自己选择需要安装的内容,这里为了简单举例子,我就分了两组。
单击下一步,将安装文件添加到相应的分组类。
图10
单击 Add Files,在弹出的对话框中选择相应的文件,
为了使你的安装工程可以很容易的移植到其他的机器上,工程向导或者IDE对你添加的每一个文件都创建了一个path variable,
图11
单击下一步,设置快捷方式,图12
图12
我们可以在下面的第二部分中可以看到关于设置快捷方式的详细描述,我们不在这一步骤设置快捷方式,单击下一步,
图13
通过导入reg文件来修改注册表的键值,直接跳过,关于修改注册表,后面有详细的描述
单击下一步,选择安装的对话框
图14
这里你可以选择你安装过程中需要的对话框,向导会自动将你选择的对话框脚本函数添加到工程的脚本中,在第6部分你可以了解到脚本的内容。
单击下一步,选择安装对话的皮肤,见图15
图15
这里我选择了Blue,你也可以选择None
单击下一步,进入向导的最后一步,
图16
检查你在向导中设置的选项是否正确,如果确认无误,单击完成,就创建了一个新的安装工程,这个工程一般都在你的机器,我的文档目录下,下面进入第二部分,利用IDE修改我们创建的安装工程
1.2 利用IDE修改安装工程
设置Features的属性
图17
Featrues的一些属性如下,你可以分别设置
图18
设置安装类型的属性,图19
图19
对应三种安装方式,最小,典型,自定义,你可以分别选择不同的安装组件相匹配。
从IDE中向工程中添加文件
下面我们演示如何向工程中添加文件,
首先打开Files and Folders视图
图20
然后从上面的source 文件夹中选中要添加的文件,然后拖动到下面的工程中,然后会弹出一个让你添加路径变量的对话框。
Ok,下面讲述一下如何编译我们的这个安装工程。
1.3 编译安装工程
单击“Build”菜单,如图21
图21
选择Realse 向导,弹出下面的对话,单击下一步,按照提示,一路走来。
图 22
图23
在这个属性页中我们可设置我们安装文件的名称,单击下一步
图24
这是用来指定一个文件夹名称,你编译出来的安装文件将来就存放在这个文件夹下面。
下面的这个属性页可以直接跳过
图25
图26
上面的这个属性页可以设置语言
单击下一步,进入选择媒体类型的页面,这里我们选择我们安装程序的发布介质,我们选择CDrom,
图27
图28
单击下一步,
图29
Ok,这里我们选择了Compress all Files,
单击next,
图30
单击下一步,我们来指定如何定位安装源文件
图31
这里我们选择了从我们的安装文件中复制,单击下一步
图32
这个属性页同上
下一步,用来选择是否要添加NET framework组件。
图33
这里我们选择不包含net framework。下一步,包含Visual J#
图34
单击下一步,进入高级选项选择,图35
图35
呵呵,终于快要大功告成了,单击下一步,检查一下啊我们的选择是否正确,如果正确无误,单击完成,
图36
Ok,至此,单击完成后,我们的工程就会自动编译,在你的安装工程下生成安装文件。目录就是你指定的。Ok,看看我编译的安装文件吧
图37
Ok,下面就是运行我们的安装文件了,来吧,试验一下,还有很多功能需要后面添加,,但是这个已经可以安装运行了。
1.4运行安装工程
单击上面的setup.exe文件,就开始运行我们刚制作的安装程序了,
图38
具体的页面省略了,如果你一路跟我做到这里,我相信你的安装文件也可以运行了,下面我看看如果添加其他的东西,更精彩的内容在后面的呢,如果修改注册表,注册com组件,修改安装界面,等等内容。
2、设置快捷方式以及修改注册表
先讲一下如何设置快捷方式。下面我在开始的programes菜单中添加Imclient.exe的快捷方式。首先我们在IDE中打开ShortCuts视图,见图39
图39
右键单击Programs Menu项,在弹出的菜单中选择New Advertised Shortcut,如图39,然后在弹出的Browse for a Component 对话框中,从列表中选择Imserver.exe。如图40:
图40
然后单击Open按钮。设置下面的属性
图41
当然,在这里,你还可以根据上面的提示分别设置桌面快捷方式,等等。下面一个内容就是如何修改注册表,假如我们向注册表的 HKEY_LOCAL_MACHINE\SOFTWARE\linkrun\imserver下添加一个liqdata的键:
对于很多文件而言,安装程序只要将他们从源文件处复制到目标系统中就可以了,但是对于某些文件,安装程序就要在目标系统中注册他们,比如,自注册文件或者ActiveX 控件。下面我演示一下如何在你的安装工程中注册一个G729AEC.dll,一个com组件。
1、首先打开File 和Folders视图如下图
图42
2、在Files and Folders视图的上部,Add new components to the feature列表框中选择一个你的安装程序名称。这里我选择client
3、在下面的安装目录上右键单击,在弹出菜单上选择Launch Component wizard项。
图43
4、在弹出的添加组件向导中选择“Let me select a type and define the component myself”,单击下一步。
图44
5、选择你要添加组件的类别,然后写下你的组件的名称
图45
6、下面选择你的组件在目标机器上的位置你可以选择放到安装目录下,也可以选择放到WinNT系统目录下
图46
7、单击右侧的浏览按钮,选择你的组件。见图47,48
图47
图48
8、单击完成就将一个com组件添加到安装工程中了
图49
Ok,现在运行我们的安装包就可以将G729AEC.dll安装目标机器上,并注册。
通常我们在制作安装程序的时候,我们总是要考虑我们程序的运行环境,比如,操作系统的语言,用户是否有权限。
如果你想在某些特定的操作系统中安装你的程序,你可以通过设置组件的操作系统特性来防止你的程序在其他系统上安装。这个可以在Setup Design视图中完成。
下面我演示一下,如果创建一个只能安装到Windows NT 4.0 and Windows 2000 systems:下的组件:
1、打开Setup Design视图,图50
图50
2、右键单击Client项,在弹出菜单中选择New Component;
3、然后将你新添加的这个组件,改名windows_nt_files
图51
4、右键单击File面板,添加相应的文件
图52
5、右键单击你的文件,将你添加的文件设置为Set Key File。
6、然后将window的操作系统属性设置为Windows NT 4.0 and Windows 2000。这样你的组件就只能安装到Windows NT 4.0 and Windows 2000系统上了。
图53
我们还可以设置Windows Installer Conditions来进行条件安装,具体的可以参考帮助文档。
InstallShield开发工具是采用InstallScript语言来运行一个安装程序的,你可以在InstallScript视图中来修改工程的脚本程序。如下图
图54
InstallScript MSI脚本语言采用的事件驱动模式,也就是说,所有的函数调用是安装一定的顺序来进行的。
在你的工程中自己定义的函数都会出现你的函数树上,见上图,你可以单击树上函数名称来编辑或者修改该函数。
事件处理函数(event-handler functions)是不会出现你的函数树上,但是这些函数你的工程也可以使用,当然,此时我们使用的该函数的缺省代码,如果你想修改某个事件处理函数,你可以从事件列表中选择一个事件比如我们选择(Befor Move Data),然后选择一个关于这个事件的函数(比如Begin),然后这个函数的定义就会出现在你的脚本中,在你的脚本中会出现下面的代码。
图55
////////////////////////////////////////////////////////////////////////////// // // FUNCTION: OnBegin // // EVENT: Begin event is always sent as the first event during installation. // ////////////////////////////////////////////////////////////////////////////// function OnBegin( ) begin // TO DO: you may change default non-UI settings, for example // // You may also perform your custom initialization steps, check requirements, etc. end;
你可以在这个函数执行自己的代码了。
下面我们演示一下如何在这个函数添加一个MessageBox函数。
1、首先将begin和end间的//开头的都删除
2、按下CTRL+I弹出添加函数的向导。
3、在函数的种类列表中,选择“Built-in dialog box”.
4、在函数名称中,选择“MessageBox”.单击下一步。
5、In the szMsg field—which contains the message you want to display—type "Welcome to the Tutorial installation!" (including the quotation marks).
6、In the nType drop-down list—which specifies the type of message box to display—select INFORMATION.
7、Click Finish to paste your function call into the script.
最后,其实就是在你的OnBegin函数中添加了如下的代码:function OnBegin( )
begin
MessageBox ( "Welcome to the Tutorial installation!" , INFORMATION );
end;
当你修改了你的脚本时,你就要重新编译它,这样,当你运行安装程序的时候,在弹出欢迎对话框之前就会弹出这个消息框。InstallScript语言包含了大概250个函数用来处理相关的任务,详细内容参见帮助文档。
6、修改安装界面
处理用户的输入:
在你的安装脚本中,所有处理用户输入对话框的显示只在下面的四个函数中出现
OnFirstUIBefore,这个函数里包含了用户第一次安装该程序,在复制文件之前的所有的对话框。
OnFirstUIAfter,这个函数包含用户第一次安装该程序,在复制文件之后所用到的对话框显示
OnMaintUIBefore,这个函数中包含了用户采用maintenance模式安装时,在复制文件之前的所用到的所有的对话框。
OnMaintUIAfter,这个函数中包含了用户采用maintenance模式安装,在复制文件之后所用到的对话框。
对于InstallScript MSI工程来说,其实这里最重要的还是OnFirstUIBefore and OnMaintUIBefore两个函数,用户无论是第一次安装还是maintenance安装,对话框显示都在这两个函数中,
OnFirstUIBefore函数缺省的情形应该像下面这样吧
Dlg_Start: // beginning of dialogs label Dlg_SdWelcome: szTitle = "" szMsg = "" nResult = SdWelcome( szTitle, szMsg ); if (nResult = BACK) goto Dlg_Start; Dlg_SdCustomerInformation: szMsg = ""; szTitle = ""; nResult = SdCustomerInformation( szTitle, szName, szCompany, nUser ); if (nResult = BACK) goto Dlg_SdWelcome;
ok,关于InstallShield8.0的入门就简单介绍到这里,关于安装程序的制作,以后有机会我会写一些更加详细关于InstallShield的帮助文档,如果大家有有什么问题,希望多交流。