Windows XP的一个重要革新就是引入了隔离组件(Isolated Components)和并列共享(side-by-side sharing)功能。作为原来Windows中经常出现的DLL冲突问题的解决方案,Microsoft 强烈建议应用程序使用组件隔离和并列共享技术来解决DLL调用的问题。微软在ComCtl version 6中使用了并列共享处理,证明隔离组件和并列共享是未来Windows的发展方向。在这一节中,我们来了解一些Windows XP的隔离组件和并列共享的整体技术框架。
在使用隔离组件和并列共享模式下,一个组件的很多个不同版本被同时安装在系统中。注意,是"同时"安装在系统中。在原来的Windows中,系统中一个组件或者是DLL只能有一个版本,因此在安装应用程序的时候,我们经常看到这样的对话框:"要安装的xxxx.dll 比系统中原有的要旧,是覆盖还是保留?"。这个问题的确不好问答,因为安装旧的DLL吧,那么原来使用新的DLL的应用程序可能无法正常运行;如果不安装,那么新的应用程序也可能无法正常运行。这真是个两难的问题。
Windows XP使用隔离组件和并列共享较好地解决了这个问题。由于系统中可以有一个DLL或组件的多个版本同时存在,应用程序在运行的时候可以选择使用自己在设计或开发的时候经过严格测试的组件版本。这样可以避免应用程序被迫调用不同版本的DLL或组件而可能导致的不可预知的错误。
在Windows XP中,隔离组件和并列共享主要是通过程序清单(manifest)来实现的。通过程序清单,一个应用程序完整地定义了自己运行时需要调用的DLL或组件的版本。Windows XP根据程序清单,保证系统中一个应用程序的升级或删除不会影响到其它的程序需要使用的DLL或组件。所以我们看到,隔离组件和并列共享可以保证系统的安全和应用程序的安全。
"程序清单(manifest)"是一个XML 文件,包含了一个程序安装和装配的全部信息,例如所有程序捆绑和安装需要的元数据(元数据指程序需要的基本的DLL调用、组件支持、接口定义等),例如COM 类、接口定义和DLL库定义等。清单文件有两类:应用程序清单文件,用来描述应用程序所需要的所有元数据;装配清单文件,用来描述单个组件的安装。
一个应用程序可以在程序清单中明确地指出自己包含的所有程序部件如何安装在系统中。一个应用程序包含很多基本的元素,例如接口定义、帮助文件、不同版本的组件、系统配置信息等。所有的这些元素,可以根据程序清单分成两类:公有的和私有的。公有元素可以被计算机上安装的其他应用程序使用,他们被安装在Windows XP的WinSxS目录中。私有元素只能被包含他们的应用程序使用,安装在应用程序独有的目录下。