什么是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
  • 1586

什么是WinSxS?

如何安装VC库?一个看似简单,其实一点都不简单的问题。我一直以为放在应用程序的目录下是最好的,可以避免Dll Hell,其实不然!这篇文章“Why does VC8 install libraries...
  • optman
  • optman
  • 2007年09月19日 23:57
  • 6741

什么是WINSXS文件夹

转自:http://blog.163.com/yuan_haoliang/blog/static/81198320097178431691/ 从WINDOWS 98用到现在的7,自VISTA开始就出现...
  • greatwall83
  • greatwall83
  • 2009年08月27日 10:08
  • 1157

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

刚使用Win7 系统不久,前段时间在清理系统垃圾时发现,win7系统的windows目录下的winsxs 目录占用空间非常大,想清理之,却提示无权限无法清理。随即在网上查了个究竟,原来winsxs是一...
  • heng_2679
  • heng_2679
  • 2010年11月11日 10:45
  • 202341

SxsTrace程序追踪工具介绍及其使用

SxsTrace.exe(SxS程序跟踪工具)是一个可执行性的软件。微软公司的操作系统版本号在6.0.18000之后的操作系统才会包含有此软件,如vista、windows 2008、windows ...
  • pizi0475
  • pizi0475
  • 2012年07月26日 21:36
  • 2889

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

问题描述: 由于win2008占用空间过大,磁盘空间已经满,所以要压缩 空间大户  c:\windows\winsxs.如图 目标:压缩winsxs 难点: winsxs ...
  • w497629433
  • w497629433
  • 2014年04月13日 03:06
  • 5422

什么是SLA 续

 一、什么是SLA SLA(Service Level Agreement)即服务水平协议,指IT服务提供商和客户之间就服务提供中关键的服务目标及双方的责任等有关细节问题而签订的协议。 对于SLA的必...
  • ericsone
  • ericsone
  • 2007年02月27日 22:29
  • 2441

win8、server 2012 清除winsxs文件夹

使用系统自带的文件清理工具
  • wem520
  • wem520
  • 2014年04月11日 11:10
  • 5897

在windows server 2008 R2上运行disk cleanup

通常情况下可以在开始-〉Accessories->system tools 里直接找到Disk cleanup 但是在windows server 2008 R2里, 找不到。 为了可以使...
  • a33b33C33
  • a33b33C33
  • 2015年07月24日 02:17
  • 2695

什么是C++ boost(续)?

   C++ boost 实现了一下功能:boost是一个准标准库,相当于STL的延续和扩充,它的设计理念和STL比较接近,都是利用泛型让复用达到最大化。不过对比STL,boost更加实用。STL集中...
  • hexiankun
  • hexiankun
  • 2008年11月09日 15:19
  • 806
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章: 什么是WinSxS(续 )
举报原因:
原因补充:

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