首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >卸载正在使用的共享程序集,使WinSxs处于糟糕状态。

卸载正在使用的共享程序集,使WinSxs处于糟糕状态。
EN

Stack Overflow用户
提问于 2009-09-15 06:09:31
回答 1查看 927关注 0票数 1

我在卸载共享win32 SxS程序集时遇到了麻烦,它使用Wix3在WinXP上运行。我的wix文件看起来很像http://n2.nabble.com/Tutorial-How-to-install-files-into-WinSxS-td841475.html中描述的文件。

问题是,如果正在使用程序集中的模块,卸载程序将成功地完成错误代码,但程序集处于中断状态:清单和安全目录已被删除,但程序集目录中仍然存在我的dll。DLL可以重新启动,因此不会以任何方式标记删除。MSI日志文件中没有明显的错误。

如果我尝试重新安装软件包,它将跳过程序集的安装。组件已不再注册,因此我无法让安装程序尝试重新卸载。在随后安装的msi日志中显示了以下内容:

MSI (c) (98:44) 11:46:56:263:组件的跳过安装:{26A273E7-7F9A-4F77-9FA8-5E413A155BEC}

除了手动删除程序集的目录外,我找不到一种方法将SxS恢复到一个良好的状态,此时XP系统恢复不再保护程序集目录。

虽然我的实际安装程序要复杂得多,但我已经能够用一个非常基本的安装程序来再现它,它只有一个包含单个组件的特性。该组件包含一个dll、一个清单和一个安全目录。dlls元素具有KeyPath、Assembly和AssemblyManifest属性集。安装完毕后,我可以通过在MSVS中打开DLL来模拟加载程序集的进程。

是否应该在卸载时调用额外的操作来检测和防止这种情况?或者,在WinSXS中已经存在DLL的情况下,是否也可以强制执行安装操作?

在某种程度上,如果我试图升级安装程序集的包(如果程序集没有更改),我也会遇到问题。安装程序决定它不需要重新安装程序集(因为它没有更改),但是当SxsUninstallCA运行时,它会离开并移除程序集。从安装程序的角度来看,组件仍然被安装,但是文件已经没有了。

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2009-09-29 22:58:33

我正在做一些我相信我会遇到同样的问题的事情。

在这一点上,我的假设是,我必须使用来自HKLM\SYSTEM\CurrentControlSet\Control\Session Manager\PendingFileRenameOperations regkey的一个小的mojo来解决这个问题,并且可能需要一点文件权限(如果文件仍然被锁定的话)。

当然,这需要重新启动。

当然,在安装程序中,您可以检查键的存在并阻止安装,直到它们消失为止。(即“你需要重新启动”)。

票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/1425411

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档