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

标签 assemblies wix windows-installer uninstallation winsxs

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

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

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

最佳答案

据我所知,拾荒行为并未在任何地方暴露出来。我什至不确定它什么时候自动启动。也许是在卸载服务包时?也许一些工具管理员可以运行?我真的忘记了。

无论如何,我的建议是不要反抗。那里有太多曲折的转弯,根本不值得尝试恢复磁盘空间。一旦卸载,仍在 SxS 缓存中的位将不会被激活,因此它们只是浪费空间。

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

关于assemblies - 如何卸载 Win32 程序集并清理 WinSxS?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/525958/

相关文章:

winforms - 在 Winforms 中支持 SQL Server 2008 R2 和 2012 的 SQL Server 管理对象

c# - 使用程序集中的 Web 应用程序版本号 (ASP.NET/C#)

c# - Wix 安装程序 - 更新多个连接字符串

wix - 使用 WIX 的 InstallDir UI 扩展时在两个退出对话框之间进行有条件的选择

.net - 从设置和部署项目写入 AppData

c# - 寻找在 Sandbox AppDomain 中加载程序集的最低权限。为什么需要这些权限?

c++ - 如果我使用一个用 C++ 编写的旧 Windows 95 .EXE,并且我想将 8 位整数转换为 16 位整数,会不会很困难?

wix - 在 WIX 安装程序中检查 RAM

wix - 在我的 Product.wxs 中引用另一个 .wxs 文件

wix - 始终自动登录 WiX