在打包交付应用程序时,需要考虑许多事情。对绝大多数程序员来说最重要的是运行环境。内部使用的程序可能与通用程序考虑的侧重点不同,它可能没有时间完成一个完整的打包工作棗对内部应用来说时间往往是至关重要的因素。
注 有三种基本的程序打包类型:企业内部应用软件、共享软件和商业软件。
本节将讲述三种最基本的程序打包类型:企业内部应用软件、共享软件和商业软件。你很可能只会去阅读其中之一,但最好还是也读一下其它类型的叙述,因为其中包含有许多有用的技巧和提示。而某些人更不应该满足于只了解某一种类型,例如:你是公司的顾问,你也就是半个内部程序设计人,因为所建立的大部分应用程序都是供公司内部使用的;同时,为了满足外部用户的需求,至少要提供一个共享软件级的打包封装(一些客户甚至想要一个商业软件级的打包,但这种情况相对少一些)。
提供哪种打包方式很难一言以蔽之,但也不是毫无依据,关键在于对应用程序的使用人群作出正确的评估。如果用户需要的只是运行稳定、不需要多少的修饰,使用企业内部应用打包格式就很合适了。
企业内部应用软件
设计企业内部应用程序的程序员最不用关心封装的华丽性,最需要关心程序的可定制性。事实上,企业内部程序不用靠精彩的画面、美妙的音响来吸引用户,界面只要功能完善、用户友好就足够了。如果你手边还有许多项目有待完成,即使费尽心机地设计了一个精美的安装程序,也不会赢得老板的赞赏。
另一方面,企业内部程序却常要考虑提供可定制性。对于可定制的程序,特别是数据库应用程序,特别之处并不只是要使用特定的文件,还需要定制注册项及进行许多其它的设置。建立一个在企业内部各种工作站上都运行良好、不需要设计人员帮助的安装程序是最重要的要求,必须花些时间手工调整用诸如InstallShield一类产品建立的标准安装程序。
企业内部安装程序不同于其它两类安装程序的另一个重要之处是发布时所使用的介质。共享软件和商业软件,通常使用软盘存放(现在越来越少了)。除非你所在的企业太落伍了,否则肯定会有LAN环境供发布程序,可以充分利用这个环境。同时使用最简单而有效的存储介质:CD盘。你会发现如果将应用程序打包在CD上,用LAN来发布,建立和测试安装程序都会快得多。
技巧 InstallShield 6 Professional Edition提供了通过Intranet安装应用程序的能力。不管公司的规模有多少个楼宇,都可以应用我们介绍的原理,通过LAN发布应用程序。在决定以软盘或CD的形式存储应用程序并手工发布之前,必须花时间研究InstallShield或其它封装程序提供的各种发布方法。对于企业内部应用程序来说,用LAN或intranet来发布最为有效。
在LAN上打包好应用程序之后,只需在登录服务器的主批处理文件中加入安装程序命令就行了。下次当用户登录时,批处理检查该应用是否已经安装;没安装,自动调用已放在LAN上的安装程序。
技巧 安装公司内部软件时,用UNC路径代替标准驱动器符的方法非常方便。源目录用UNC路径保证每个用户都能方便地访问所需的源文件。
在企业应用环境中,发布程序时还需要考虑一些因素,下面各要点就是为保证安装程序的可定制性所要考虑的。使用哪种方式取决于具体环境,如企业机构的设置以及用户的连网情况。
通用文件可以集中存放 应用程序的标准发布方式为将所有文件都安装到用户的机器上,这是共享软件和商业软件发布的唯一方法;而对于企业内部程序来说,可以把通用文件——比如DLL——存放到文件服务器上。这种方法有两个好处:首先减少了对用户机器存储空间的要求;其次当用户在DLL中发现错误时,更改起来更快——只需改动服务器上的DLL就行了。这种方法也有两个缺点:第一,用户必须连网;第二,如果经常加载/卸载DLL必然会极大地增加网络流量。
绝对的优势 共享软件和商业软件的设计者无法预先假定应用环境的任何因素——源和目的都不确定:使用何种机器是个未知数,有时连操作系统也是未知的;而对企业内部应用软件来说,设计者则没有这种麻烦,所要顾虑的是网上机型互不相同。如果对所有机器都用同样的安装方式,可以指定一个缺省的目的目录;使用UNC路径名时,可以指定一个绝对的源目录,因为服务器路径名不会因安装次数的不同而变化。当网络规模不大、工作站配置一致时,甚至可以规范到每台站点。总之,不需要给用户提供太多的安装选项,从而从根本上减低安装程序的复杂性。程序员所要完成的工作就是事先胸中有数。
不用设立配置选择项 所有的商业软件都提供三种安装时配置选项:定制安装(Custom)、典型安装(Typical)和最小安装(Compact)。定制安装允许用户选择程序部件;典型安装专为桌面用户设计;最小安装则是为膝上电脑用户设计的。多数情况下可减化为两项:膝上安装和桌面安装。其实,用这些词汇只会使用户费解最小安装的含义。
共享软件
共享软件的设计者在打包程序时所遇到的挑战最大。看看其中的一个主要问题:安装的大小。与拥有高速网络环境的企业内部软件不同,也不像商业软件那样可以用CD进行发布,共享软件的用户一般用低速Modem连接到BBS、联机服务或Internet上。有足够的证据表明,当程序大小超过1MB时下载它的人数会急剧下降。
注释 本节所限定的文件大小只是指导性的,潜在用户愿意在你的程序上投入的盘空间和时间取决于许多因素,诸如人为的估计和程序已显示的价值等等。例如:有一个我很喜欢的图像打包共享软件,它要占7MB硬盘空间,压缩后也超过1MB,但人们还是很愿意下载并使用它,因为它物有所值!众口皆碑就是人们愿意下载的最好动力。你需要考虑的是人们是否愿意为你的程序掏腰包棗如果你真想参与到共享软件市场的话,这是必须学习的经验。
好了,这些决定了程序空间的限制。那么如何克服呢?关键在于如何将产品市场化。多数成功的共享软件一遍又一遍地使用同样的图像和声音;换句话说,不会出现安装程序用了一种奇异的图像,而应用程序本身又用了另一种图像,共享软件的要旨是安装和使用的界面的一致性。事实上,使用精确的程序设计技术能使你有多次机会轻松地摆脱应用程序的图标(我们在第三章讨论过)。
像企业内部软件那样没有动人的图像或声音,共享软件也能赢得用户吗?情况不太一样。如果真是想吸引用户进一步购买,就必须在程序中加入一些靓点。没有人愿意付钱给一个看上去邋里邋遢的程序,即使它的功能很强大。显然,想让程序既短小又完美是件很难的事。
开发共享软件的另一个问题在资金方面。许多共享软件的作者只有一两个人,在他们等待产品售出的过程中不得不从事其它咨询或冒险性的工作来维持生计,他们没有充裕的时间,也不会像出品商业软件的大公司那样,有专业的美术或音响指导。因此,共享软件只要设计良好、占用空间合适(比如说5MB左右)并稍加雕琢就很令人满意了。
我们尚未讨论共享软件设计者必须面对的最大的问题,安装程序只是第一步。企业内部软件对应用环境有最全面的控制,可以控制到使用该程序的每台机器,而且设计者即使在机型检查和配置选项方面作的工作很少也会得到认可。商业软件的设计者情况相近,至少他们可以在软件包装盒上印上说明,规定运行该程序的硬件要求,事实上,只要用户买了相应的商业软件就会意识到对硬件环境的需求。共享软件的设计者就没有这种保证了,它的用户的机型可是包罗万象的——甚至是一台老掉牙的8088 PC。
这种无法预测会带来什么后果呢?首先,在程序中必须额外设计一段检测例程,以保证满足最小硬件需求。用户总是很少去读README文件(通常在这里指出最小环境需求),甚至根本不注意它,当他们安装失败时,却只会抱怨设计者,根本不会承认是自己的失误。因此,必须有检测程序。还需要提供灵活的、可供选择的配置选项,例如:当机器档次低时,用户可以只选用文本格式,摒弃所有的图像和声音。
注 企业内部的程序员能够全面地控制应用程序的运行环境,而共享软件的开发者则几乎不能掌握其程序的运行环境。
技巧 如果时间和财力充裕,设计一个卓越的安装程序,非常有助于共享软件的销售。要让用户明白钱花得物有所值,换句话说,如果在安装过程就吸引了用户,无疑增加了他愿意购买的欲望。
共享软件设计者一般都有一些使安装程序更加实用的技巧,下面我给出的一些原则也还是有帮助的。在最后决定使用什么样的包装之前,必须进行反复的试验比较。
打包分割化 减少盘空间占用量和下载时间的一种方法是将程序打包成几个部分。例如:主程序放在一个部分,图像在另一部分,声音在第三部分。这样用户就可以选择愿意付出的盘空间和下载时间的多少。必须保证程序没有图像和声音(或是其它决定放在单独包装中的部分)也可以正常运行。安装程序也要提供相应的灵活性,当用户只下载了部分打包程序时应该也能安装。
帮助详细化 我们讨论一下将第15章建立的帮助文件放置在独立打包中的情况。方法之一是制作一个主帮助文件和一个详细的帮助文件。主帮助文件中含有对基本命令的解释,详细帮助文件中含有用户教程、宏语言描述和指令的细节说明。同样地,用户可以选择付出的盘空间和下载时间量。程序设计者也会从中受益:共享软件无法预测是否畅销,因此在没有回报时就投入大量的时间和金钱是很困难的,而用这种方法可以减少投资,直到有购买态势之后再继续投入。
技巧 已经有一些共享软件公司用模块化的方法拓展销售。例如:当用户下载时,ButtonWare总是提供一个简单的帮助文件和程序的主要特征,购买时再允许用户下载全功能的程序和完整的程序文档。许多用户会抱怨称之为“半残的软件”,在购买之前根本无法测试!不幸的是,除非设计者能充分地说服用户购买,否则用户是轻易不会掏钱的(我说的是实话,无数共享软件公司都因为销售不畅而倒闭了,但它们的软件却仍在广泛使用)。
商业软件
我并不打算假惺惺地要教微软之类的大公司如何包装产品、开发市场棗它们的市场开拓效果已经是有目共睹,我似乎在班门弄斧。商业软件区别于共享软件的一个特点是软件的大小。大的软件公司通常集中于一个或多个产品,有许多专业的设计小组完成整合封装。研究一下这些软件,也会使我们这些普通的程序员从中受益。
过去的几个月中,每当我安装一个成熟的软件产品时我都非常留意。装过30个产品之后,我审视了一下这些记录,结果令人吃惊。例如:前面我说过,对于共享软件的作者,设计一个好的安装程序会有助于销售,因为他财力有限,必须用第一时间抓住用户。令人惊奇的是商业软件也情同此理,只不过方法不同罢了。用户已经购买了这种产品正在安装,但是还有其它增值产品呢?商业软件厂家总是利用安装的时机,推销相关连的增值产品(比如安装字处理程序时,介绍字典软件)。
另外,我发现商业软件在安装时总是告诉用户程序的新增特性。这倒不奇怪,因为这些公司早就注意到用户不留意README文件,安装往往就是用户装载一个软件的最后一步。同样地,他们要吸引用户,因此在安装程序中就要使用户对程序有一个整体概念。
商业软件总是带有许多多媒体功能也就不足为奇了,因为这些公司有足够的开发实力;即使不像这些大公司那样实力强劲,同样应该注意我们强调的该作什么,不该作什么。在安装程序中提供的版本虽然小但要代表原貌才能吸引用户,牢记你要作的就是尽可能给用户最好的第一印象,因此一个精彩的安装程序不仅仅是应用程序的良好开端,也是用户了解程序的窗口,它很可能会决定用户是否来购买你的程序。
你也能够从商业程序中吸取一些教训。其中之一是安装程序太复杂,以至于测试得不完善,最近,我就遇到了这样一个产品,安装时发现它的帮助屏幕是给老版本做的棗厂家忘了更新它了!结果呢?因为该产品也没带任何印刷的说明书,我就很困惑产品中的各部件有什么特性了。如果厂家认真完整地测试了安装程序,我就会明确地得到想要的信息,以决定安装哪些部件。
另一个很奇怪的问题是产品根本安装不上。似乎是因为安装程序中用了某种特殊的图像,碰巧我的机器不支持。换了台机器,安装后该程序运行得很好,但安装程序本身还是显示不全。同样地,厂家为了追求精彩,却适得其反了。
从这一节可以看出,研究一下别人封装产品的方法,能取得事半功倍的效果。我发现事先写下注意事项,在动手编写安装程序之前仔细阅读一遍,可以少犯许多错误(几乎没有人可以一蹴而就)。