本文不涉及到Install Shield的高级应用,如果您急需用Install Shield对您的应用程序打包,并且对Install Shield几乎没有使用过,对生成的安装包的要求不是很高,那么本文非常适合您。
首先准备安装好的Install Shield,这里以Install Shield12为例说明。使用最新版软件的好处就是更新的功能和更少的bug,所以只求最新,呵呵。
其次是我们的应用程序,非常推荐采用静态编译的Release版本作为要打包的程序(本文以VC6的一个应用进行举例)。确保我们的应用程序能够独立运行,确定我们的应用程序所要用到的文件都存在。
再次:确认我们的软件是否需要多语言版的安装方式。如果是,那么只是在安装包的制作上多了几个步骤而已。
打开Install Shield,File-〉New,打开New Project对话框,选择Windows Installer中的InstallScript MSI Project,并为我们的安装包命名,选定目录。然后OK
OK之后,Install Shield创建一个框架,我们只要把相应的部分填充一下就可以了。在Project Assistant选项页,共有很多步骤,一个一个来:
这一页要求输入应用程序的一些信息,值得注意的是Web address这一项,它会根据我们输入的公司名称改变,所以要注意它的内容。其余的选择使用默认值。
本页选择保持默认值。
本页选择保持默认值。会在以后有些改动。
总是保持默认值会让人昏昏欲睡,并且容易错过重点,那么我们开始做点不是默认的操作:添加文件。
在这一页,Install Shield会在[ProgramFilesFolder]下面创建一个公司名称的目录,在其下,会有一个My Product Name的文件夹。我们可以根据需要对它改名,或者改变位置。
选择我们要添加文件的文件夹,在右边的可以选择添加文件,或是文件夹。值得注意的是:在添加文件夹的时候,会给出一个提示,具体内容记不得了(如果选择恰当的话,只出现了一次)。要看清楚,选择好,否则添加的内容会有不妥。
如果需要向系统的Windows目录或者System32目录添加文件,那么在Destination Computer-〉Show Predefined Folder,选择Windows Folder即是Windows目录,选择System Folder即是System32目录。
再如果需要向以上两个目录的文件夹中添加文件,那么就在Windows Folder或者System Folder下创建文件夹,名称和系统文件夹的一样,比如Windows Folder/inf,System Folder/drivers。文件就会添加到目标机器中的制定目录。
如果在前面添加了一个可执行文件,那么在这里就会有一个指向它的快捷方式。选择这个快捷方式,右边还有可选项让我们决定是否在桌面上创建快捷方式。
那么卸载的快捷方式呢?看左边的More Options-〉Create an uninstallation shortcut,就是这么简单。
注册表操作,本着绿色的精神(其实是怕麻烦),我们继续默认。
之所以不使用更加简单的Basic MSI Project来创建安装包,就是为了这一步骤的多语言支持。
在语言列表中选择要支持的语言。在我们选择了的语言中,有一种上面有一个红色的勾选标记,代表默认的语言,怎样改变它呢?切换到Installation Designer页面,定位于:左边:Installation Information-〉General Information。中间:General Information-〉String Tables,选择语言,右键设置为默认。
很显然,现在还不能打包,有些地方还需要定制一下,除非我们的要求就这么多。那我们就可以选择其中一种或几种安装文件类型,然后Build Installations。
打包好了,发布出去,马上就有反馈:应用程序不能使用,怎么回事?
这是因为应用程序需要一些组件来运行,这些组件在我们装有开发工具的机器上是存在的,但是不能保证一个干净的刚刚装好的操作系统里面有这些组件。
怎么办呢?Install Shield提供了工具,可以分析我们的应用程序需要哪些组件,并把它们加入到安装包中。
在Project菜单,运行Perform Static Scan。(相应的,还有一个Perform Dynamic Scan,会让我们运行一下程序,动态的跟踪分析,但是觉得不如Static Scan来得简单彻底)
在Static Scanning Wizard中默认下一步操作,会给出一个检测的结果。列出哪些添加的文件用到了组件,通常情况,我们要把这些组件全都选择上,加入到我们的工程中,这样,我们的安装包部署之后,就可以很好的运行了。
这里的多语言版本仅仅是指安装包的多语言版本,应用程序的多语言版本是另外的话题了。实际上前面的Installation Localization那一节已经完成了大部分的功能,并且已经可以使用了,但是如果我们想要加一个EULA(End User License Agreement),并且每种语言要显示该语言的EULA,那么就对我们的安装包工程稍稍进行一点改造吧。
在Installation Designer页中(美好的助手已经帮助完我们了,剩下的我们要自己动手了),定位到Organization-〉Components,在中间的Components-〉右键-〉Component Wizard。
在Component Wizard对话框,第一页Next,第二页选择安装的位置,在下拉列表中要安装的位置,一般来说,主程序文件夹在列表的最后一项。第三页,选择文件,我们选择第一种语言的EULA文件,然后Next,最后一页Finish。另一种语言的EULA也如法炮制。
我们将会在Components看到两个新的Components,但是其中的一个有一个红色的叹号,让人不爽。我们可以把它们重命名一下。然后切换到Organization-〉Setup Design,在中间的Setup Design下面的任意一个Feature(通常是Default Feature)-〉右键-〉Associate Components,将列出的Components并入Feature。
回到Organization-〉Components,在中间选择第一种语言的EULA的Components,在右边的属性列表中查找Languages,选择相应的语言,默认的选择是Language Independent(语言无关)。类似的,如果我们需要加入一些语言相关的文件,那么就在相应的组件设置语言的相关性。
再来到:Installation Information-〉General Information-〉String Tables,这里面应该有我们选择的语言,每种语言对应一个Tables,在最后加一项:LICENSE_PATH,值为我们的相应语言版本的EULA的文件名,例如:End User Agreement.txt(注意,不是我不想用rtf格式的EULA,这种打包方式只支持txt的文件)。每种语言都要添加。
再来到:Behavior and Logic-〉InstallScript-〉Files-〉Setup.Rul,在右边的窗口,第一个下拉列表中选择Before Move Data,在第二个列表中选择OnBegin。InstallShield会创建一个函数function OnBegin(),在其中添加这样几句:
// Disable the Back button in setup dialogs.
Disable (BACKBUTTON);
// Display the SdLicense2 dialog box.
if (SdLicense2 ("", "", "", @LICENSE_PATH, FALSE) = NEXT) then
//MessageBox ("Continue with the installation.", INFORMATION);
endif;
第一句是把上一步的按钮禁用,第二句就是显示License对话框,then后面注释掉的一行只是表明一个执行的路线。
至此,多语言版本搞定。
如果我们的应用程序涉及到硬件,需要安装一个驱动,那么使用InstallShield的内建功能,这将是一件非常简单的事情。
首先要确保驱动文件的存在以及完整性。
然后定位到:Organization-〉Setup Design,打开菜单项Project-〉Device Driver Wizard,在Device Driver Wizard对话框中,第一页选择Next;第二页选取驱动的.inf文件,第三页列出了inf文件涉及到的驱动文件,Next;第三页的Runtime Options using DIFx 2.01中的几项都很重要,根据需要进行选择,通常可以选择第1,3,5项,Next;第四页中选择上Include all localized installation runtime dialogs,下面的单选根据我们的驱动选择目标机器,Next;最后一页Finish。在Setup Design下面的Feature中会增加驱动文件的节点。
非常重要的是:如果我们的驱动inf文件选取之后,第三页没有列出全部涉及到的驱动文件,比如.cat文件,那么需要在相应的驱动Feature中添加涉及到的文件。做法:Setup Design-〉驱动Feature-〉驱动组件-〉Files,右边的文件列表中,右键-〉Add,加入缺少的驱动文件。
至此,大功告成。
我们可以Build Installations了。
如果想要美观一点,可以在User Interface-〉Dialogs-〉Skins中选择皮肤。可以立即作出不错的外观。