什么是WinSxS(续 )

原创 2007年09月21日 00:27:00
终于找到了微软的官方文档“Isolated Applications and Side-by-side Assemblies”,原来是推出XP时就有了的技术。以前只是大概听说,从来没有细琢磨过,原来这么有学问。

这篇“How To Build and Service Isolated Applications and Side-by-Side Assemblies for Windows XP”文章讲得比较详细,看完基本就了解整个的实现原理和开发步骤了。文章说,.NET Framework也是使用了同样的技术(Simplifying Deployment and Solving DLL Hell with the .NET Framework),只是更简单了。原来如此,我还以为assembly等概念是.NET发明的呢,不过是由它发明光大而已!

总结一下:

使用assembly的好处

1. 一个组件的不同版本可以side by side加载在同一个进程里(当然组件要能处理这种并存的情况)。

2. 不需要注册表就可以使用COM组件。

如何制作一个assembly?

编写一个manifest文件,就可以了,这是最简单的private assembly。如果要share,还需要进行数字签名,以及安装到WinSxS目录下,有点麻烦。

为什么要是使用private assembly?

因为是跟应用程序放在一起,side by side好像意义不大。不过可以为了将来转成share assembly做准备。还有,就是可以使用无需注册表的COM组件。

如何开发一个side by side的assembly?

开发可以在同一个进程里加载一个dll/assembly的不同版本并不容易,你要考虑很多情况。比如避免在不同版本的assembly之间交换数据,因为结构可能不一致。比如,避免使用共享内存以及全局信号量等等。

为什么WinSxS目录会变得越来越大?

看到网上有人说自己的WinSxS目录已经达到十几个G了,真是太夸张了。而有人说,自己的只有十几M。这到底什么回事?

这是因为assembly发布之后就不会更改,如果有Bug修改就发布新的版本,并与就旧版本同时并存。这样就可以保持兼容性,而且安装更新也可以不用重启计算机,总之是很方便了。但是,随着时间的增加,系统和应用程序会不断的进行升级,assembly的版本就会越来越多,占用的硬盘空间自然就会越来越大。

如何更新Assembly?

Side by Side是通过强制指定assembly的版本号来达到版本兼容的,但是那样的话assembly如何更新?如果assembly改变了版本号,那么依赖它的应用程序就不能自动享有更新了。而如果不改变版本号,那么Dll Hell的版本不兼容问题就有冒出来了。

微软使用了Publisher Configuration来解决这个问题,你可以强制要求所有(或者指定)的旧版本自动转到新版本来。这时候,随这新版本assembly发布,同时发布一个Publisher Configuration来强制版本号跳转(Redirect)。这样,已发布的应用程序不需要重新打包和部署,就可以使用新版本的assembly了。当然,新版本的assembly需要保证向后兼容。Publisher Configuration是全局的跳转,也可以为不同的应用程序做不同的跳转,即Application Configuration。两种Configuration都是在不改变现有应用程序的情况下,改变其Assembly之间的绑定关系,适合于Policy式的集中管理。Application Configuration可以覆盖Publisher Confiuration的设定,强制对特定Assembly版本的依赖以保证兼容性--这使得它可能错过Assembly的重要更新。

既要保持不同Assembly之间的隔离,又想要自动更新,这其实是一个两难问题,根本没有完美解,Publisher Configuration和Application Configuration只是给出了一个平衡的解决方案。

小结
在一个复杂的不断演进的系统里,组件版本的管理是个大问题。如何在不改变现有应用的情况下逐渐演进,更是一大挑战。

相关文章推荐

winsxs 那些事

1,如果你是安装了SP1的话,而且不用再还原到以前的版本,可以用下面的命令来删除安装时的备份文件。 DISM /online /Cleanup-Image /SpSuperseded   2.如...
  • eqera
  • eqera
  • 2012年02月03日 10:06
  • 1516

揭秘Win7 Vista下WinSXS超大文件夹

2009年11月03日16:29 【字号 大 中 小】 打印 留言 论坛 网摘 手机点评 纠错 E-mail推荐:   大家想必大多数人都用过软媒出品的魔方、Vista优化大师或者Wi...

Windows应用程序WinSXS部署问题小结

在开发机器上跑得好好的程序,一拷贝到别人的机器上,经常无法启动,提示: “由于应用程序配置不正确,应用程序未能启动。重新安装应用程序可能会纠正这个问题” 出现这个问题的原因是应用程序使用了...
  • wtyqm
  • wtyqm
  • 2012年02月17日 21:43
  • 1862

WinSxS清理

  • 2014年08月12日 12:15
  • 7.65MB
  • 下载

WIN7WINSXS清理工具

  • 2015年04月28日 14:49
  • 1.28MB
  • 下载

[W001]Windows 超大文件夹winsxs 目录压缩方法(适用于 7,2008,vista)

问题描述: 由于win2008占用空间过大,磁盘空间已经满,所以要压缩 空间大户  c:\windows\winsxs.如图 目标:压缩winsxs 难点: winsxs ...

C:\WINDOWS\WinSxS目录介绍,来自百度词条

C:\WINDOWS\WinSxS目录介绍,来自百度词条来源:重庆沙坪坝区网吧联盟    发表时间:2010-08-16 03:22    查看:9次      WinSxS是Windows目录下一个...

释放Win8.1 WinSxS冗余更新

谈到Windows的冗余,不得不提到WinSxS冗余,每次Windows的补丁更细,都会自动在这里产生一个备份更新,以此类推,新的替换旧的,但旧的依旧存在,逐渐产生所谓的WinSxS更新冗余。 ...

为Windows 7的winsxs文件夹瘦身,慎重。

由于是转载,该方法在我的win7上不能运行,希望慎重借鉴,还有待研究!!!!! 刚使用Win7 系统不久,前段时间在清理系统垃圾时发现,win7系统的windows目录下的winsxs 目录占用空间...

winsxs问题

  • 2013年05月03日 02:35
  • 3KB
  • 下载
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章: 什么是WinSxS(续 )
举报原因:
原因补充:

(最多只允许输入30个字)