如何卸载Win32程序集并清理WinSxS?

时间:2009-02-08 16:11:25

标签: assemblies wix windows-installer uninstall winsxs

经过大量的试验和错误(主要是由于缺少文档和示例),我设法创建了MSI安装程序,将自定义DLL作为并行程序集安装到WinSxS。只有一个问题:卸载会将所有文件(DLL,清单和目录)保留在WinSxS目录中。怎么能或者我应该最好地清理它?我确信没有别的东西能引用它。

我已经读过某个地方,WinSxS有一个自我清理过程,随着时间的推移清理,但我找不到更多相关信息。你可以手动调用它来清理东西吗?

我看到的另一种方法是手动删除这些位。首先,您必须将所有文件(程序集,目录,清单及其各自的目录)的所有者从SYSTEM更改为管理员帐户,调整权限并将其删除。注册表中还有一些内容(我认为HKLM \ COMPONENTS \ DerivedData \ Components可能是一个地方),但由于WinSxS应该被视为不透明,因此很难找到任何信息。

6 个答案:

答案 0 :(得分:5)

清除不会暴露在任何我知道的地方。我甚至不确定它何时自动启动。也许在卸载服务包时?也许某些工具管理员可以运行?我真的忘了。

无论如何,我的建议是不要打它。那里有那么多曲折的转折,只是不值得尝试让磁盘空间回来。一旦卸载,SxS缓存中的位将不会被激活,因此它们只是浪费空间。

这是一个愚蠢的设计,但责怪微软,不要试图过度补偿。

答案 1 :(得分:5)

这是一个article,它是WinSxS的完整指南。

因此,很快,您只能卸载一些组件(它们的所有版本都在此文件夹中),并且您可以运行Service Pack桥接刻录实用程序(在Vista中,它名为VSP1CLN.EXE,随SP1一起提供)。请注意,执行后,您应该无法在SP发布日期之前卸载SP或任何要声明的组件。

答案 2 :(得分:3)

没有人相信你可以 - 没有完整的重新安装,你的大量WinSxS目录就可以了。

有一段很长的"discussion" of the problem on technet

没有格式的文档,也没有任何说明如何删除不再需要的文件 - MS似乎认为光盘空间很便宜。有一个自我清除的功能,但没有人相信它的工作,或者如果确实如此,它是非常保守的(因为你希望它不希望它打破你的操作系统)

你可以通过检查“C:\ Windows \ winsxs \ Temp \ PendingDeletes”来判断清道夫是否正常工作。文件夹,因为这是Windows更新移动文件或安装程序将它们移动到的位置 - 清理程序只删除此处的文件。

答案 3 :(得分:3)

你会注意到卸载程序集后,当文件仍然存在时,它们就不再被绑定了 - 所以它们只是“暂存”或缓存,但没有真正安装。

Rob& gbjbaanb是正确的 - 你不能自己手动调用清除。不要试图自己删除文件 - 注册表中有多个注册位置,DerivedData \ Components只是众多参考文献中的一个。

我认为Vista的规则是在最后一次服务操作(Service Pack,修补程序等)之后,机器不活动10分钟后由TrustedInstaller服务启动清理。但它非常易变,所以它不会像它应该的那样经常运行。所以请耐心等待,文件将自行消失。

答案 4 :(得分:2)

我遇到了一些问题,因为我的Windows有80GB SSD,WinSxs文件夹大约是12gb​​

我正在网上搜索,我找到了这个命令:

  

DISM.exe / online / Cleanup-Image / spsuperseded

现在我的WinSxs是7gb,这是个好消息。

答案 5 :(得分:-1)

有一些适用于较新操作系统的清理方法的更新。查看http://www.karafilis.net/winsxs-cleanup