(注:本文由邹少颖译自Andy Allred2005年的英文博客系列之二。如果你要查看中文版的系列之一,请点击此处.)

在这个帖子里,我会给您展示如何把应用程序组件化的第一阶段。我们可以从一些容易的实例开始, 例如Winamp 。网上可以找到好些个不同版本的Winamp,为简单起见我选择了“Winamp-Lite” , 版本号是5.08e ,自解压缩EXE包的名字是“ winamp508e_lite.exe ”,这个软件包解压缩后大小是516KB。

您将会见到,这个组件的文件包里包括23个文件(有一些文件我们并不关心,比如卸载程序和它的相关链接文件)。这个文件包在压缩前是1.84MB,压缩后只有1.24MB。由此可见,这是一个超轻量级的软件,希望它对其它文件资源的依赖也很小。

但是有时候虽然应用程序很小,它仍然可以对其它文件资源有着很大的依赖。试想一下,如果一个应用程序是用托管代码 (例如C#)开发的,那么我们将不得不把整个.NET Framework给添加到组件里来。所以在有些情况下,应用程序文件的大小并不能正确反映出它对其它资源的依赖。

把应用程序组件化的基本步骤是:

1.安装系统监测工具(比如InCtrl5或者Ashampoo’s Uninstaller或者CleanSweep )

2.下载并安装该应用程序。使用工具来监测整个系统的变化。

3.从监测工具中得到系统变化的列表。在这个实验里,它扫描了Winamp安装前后所有的文件和注册表文件,并且比较了这两个状态之间的变化。

4.分析系统变化列表,然后把相关信息加到组件里

5.收集程序文件,并将它们添加到该组件的文件包里。

6.分析文件资源的静态依赖项,然后把它们加入到组件的依赖中。

7.把Winamp组件引入系统,然后部署这个系统。

8.洗手,在裤子上蹭干,重复步骤1-8(如果不成功的话)。

首先,我把监测程序下载到我的工作用电脑里,(这是我犯的第一个错误,我会在第3部分解释原因)。我为什么要把监测程序安装在我的工作用电脑上?您将会在XP Pro上做这些分析工作。 您的目的是了解Winamp如何和XP Pro交互,然后把这些变化体现在您的组件里。

接下来,我从Ashampoo下载和安装了系统监测软件。就个人而言,我更喜欢Ashampoo’s Uninstaller,但其他很多人似乎更喜欢InCtrl5。我不知道在哪里可以找到InCtrl5,它曾经可以从PC Magazine免费下载,但现在好像他们开始收费,或需要注册才能使用。从Ashampoo下载的系统监测软件原来的名字叫EZClean,和CleanSweep类似,当你安装应用程序和驱动程序时,它会监测系统里所有的注册表和文件的变化。它可以用来代替的Windows系统还原功能。如果有应用程序/驱动程序造成电脑不稳定,它可以让您的系统恢复到初始状态。其实使用哪个工具并不重要,最终目的是找到一个方法能够发现电脑里所有文件资源上的变化。

再下一步,下载Winamp,开启系统监测工具,然后安装该应用程序。我建议你在安装成功后继续监测系统变化,直到您确认应用程序可以成功运行为止。

当您确认应用程序能够正常启动并运行后,可以停止监测工具,这样您就不会再捕捉任何信息。

如果你之前从来没有这样做过,你会发现监测工具捕捉到的更多的是Windows的活动,而不是简单得放置二进制文件和注册表值的增加和替换。 Windows总是在后台做着一些工作,比如创建预取数据,为Explorer更新最近使用( MUR,'most recently used' )列表,等等,等等......。因此,越早关掉监测程序,在系统变化记录中的噪音就会越少。

当我完成了整个监测过程,并得到了一个系统变化记录后,所有的一切都很正常。 20多个文件被添加到”Program Files\Winamp”文件夹和子文件夹中,Winamp.ini被添加到System32文件夹中。注册表值也不错(并没有成百上千个注册表值被添加或改变)。

根据得到的系统变化纪录,我现在可以开始创建一个应用程序的组件。在这里我发现我犯了个'菜鸟'才会出的错,然后我根据这个做了些相应的调整。我会在下次当我转换系统变化记录到实际组件定义文件时展开讨论。

所有的过程,从安装监测程序,打开它,到安装 Winamp Lite, 到捕捉系统变化纪录花了不到10分钟。