
WinSxS
WinSxS里面的档案是不可删除的。
WinSxS下有很多重要的组件,版本也很繁杂,为了保证Windows的正常运行,请确保这些档案一个都不能少。这些档案支撑着mscorwks.dll,没有它们,mscorwks也无法载入。强行删除后可能只有以安全模式能勉强进入Windows,Windows也就废了。
安全的做法是使用系统自带的释放磁碟空间工具或使用第三方工具,清除service pack备份。
基本介绍
- 中文名:WinSxS
- Windows 系统:包括XP、Vista、Win7等
- 安全的做法:清除service pack备份
- 程式清单:是一个XML 档案
说明
支持COM和共享DLL的隔离
Windows 系列系统(这里包括XP、Vista、Win7、win8)在“Windows”目录下提供了一个名为“WinSxS”(Windows Side-by-Side)的资料夹。系统使用这个资料夹存储各个版本的Windows组件,减少因为动态程式库(Dynamic Link Libraries,DLL)引起的配置问题(DLL hell)。组件的多个版本都存储在这个资料夹中。Windows XP允许Win32 API组件和应用程式使用与这些程式在测试时所使用的版本完全一致的Microsoft 组件版本,并且不受其它程式或者作业系统升级的影响。Windows 通过XML档案来实现这一功能,这些XML档案保存了有关应用程式配置的元数据,例如COM类、接口和类型库。
作用
Windows XP
Windows XP的一个重要革新就是引入了隔离组件(Isolated Components)和并列共享(side-by-side sharing)功能。作为原来Windows中经常出现的DLL冲突问题的解决方案,Microsoft 强烈建议应用程式使用组件隔离和并列共享技术来解决DLL调用的问题。微软在ComCtl version 6中使用了并列共享处理,证明隔离组件和并列共享是未来Windows的发展方向。
在使用隔离组件和并列共享模式下,一个组件的很多个不同版本被同时安装在系统中。注意,是"同时"安装在系统中。在原来的Windows中,系统中一个组件或者是DLL只能有一个版本,因此在安装应用程式的时候,我们经常看到这样的对话框:"要安装的xxxx.dll 比系统中原有的要旧,是覆盖还是保留?"。这个问题的确不好问答,因为安装旧的DLL吧,那幺原来使用新的DLL的应用程式可能无法正常运行;如果不安装,那幺新的应用程式也可能无法正常运行。这真是个两难的问题。
Windows XP使用隔离组件和并列共享较好地解决了这个问题。由于系统中可以有一个DLL或组件的多个版本同时存在,应用程式在运行的时候可以选择使用自己在设计或开发的时候经过严格测试的组件版本。这样可以避免应用程式被迫调用不同版本的DLL或组件而可能导致的不可预知的错误。
在Windows XP中,隔离组件和并列共享主要是通过程式清单(manifest)来实现的。通过程式清单,一个应用程式完整地定义了自己运行时需要调用的DLL或组件的版本。Windows XP根据程式清单,保证系统中一个应用程式的升级或删除不会影响到其它的程式需要使用的DLL或组件。所以我们看到,隔离组件和并列共享可以保证系统的安全和应用程式的安全。
(元数据指程式需要的基本的DLL调用、组件支持、接口定义等),例如COM 类、接口定义和DLL库定义等。清单档案有两类:应用程式清单档案,用来描述应用程式所需要的所有元数据;装配清单档案,用来描述单个组件的安装。
一个应用程式可以在程式清单中明确地指出自己包含的所有程式部件如何安装在系统中。一个应用程式包含很多基本的元素,例如接口定义、帮助档案、不同版本的组件、系统配置信息等。所有的这些元素,可以根据程式清单分成两类:公有的和私有的。公有元素可以被计算机上安装的其他应用程式使用,他们被安装在Windows XP的WinSxS目录中。私有元素只能被包含他们的应用程式使用,安装在应用程式独有的目录下。
Windows Vista/7/8
Microsoft 在 Windows Vista/ Windows 7 里面大量使用了NTFS文档系统的特性之一的:硬连线(Hard Link)来实现WinSxS机制!
硬相连是NTFS文档系统特有的属性之一,在Linux下面,也有类似的机制。硬相连适用于在同一个卷的文档级别,硬相连是不能跨卷的。
Windows Vista / Windows 7自带了创建硬相连的命令:mklink.exe,利用这个命令,我们可以给指定的文档创建硬相连。
常常看到有人抱怨,Windows\WinSxS目录占用了太多的空间,里面常常发现有同名的文档,而且这些同名的文档在 Windows\System32 目录下面也有存在,这是为啥呢?其实这就是硬相连导致的。
Microsoft为啥这幺贫苦搞这个呢?其实如此对系统的稳定性的增加非常有好处。
同样的文档,只必要维护硬相连干係,不必要进行多重的拷贝,如此可以节省硬碟空间。
如果涉及文档更新,只必要先在WinSxS 目录里面下载好一个新版本,然后改正 Windows\System32 下面同名文档的硬相连干係,从旧版本的硬相连指向新版本的硬相连,如此就可以或许快速的完成文档的更新工作,而不必要进行文档的複製,速度也会快不少
补丁卸载也是一样的,只必要把硬相连指向改为旧版本就可以了,没有文档替换的问题。而且建立了硬相连干係的文档之间的改正是同步的,所以只要有一方被改正了,另一方也会得到改正。
当然,Windows7作业系统中的winsxs档案属性中也自带压缩资料夹的功能:右键winsxs资料夹▶属性▶高级▶勾选压缩选项▶确定▶套用。
