【问题标题】:Merge Module leaving files during uninstall在卸载期间合并模块留下文件
【发布时间】:2010-11-21 19:00:02
【问题描述】:

我们有一个 Visual Studio 2008,安装和部署,安装项目,它安装最少的文件并运行一些自定义操作。我们还有几个安装项目部署的合并模块项目。每个合并模块都有一个模块可重定向文件夹,其中包含安装不同组件的唯一子文件夹。

我们遇到的问题是,在卸载安装项目期间,安装项目部署的文件从硬盘驱动器中完全删除;但合并模块部署的文件根本不会被删除

另外,如果卸载了合并模块部署的文件后硬盘上仍然存在,再次安装安装项目不会覆盖合并模块部署的文件

我们必须得到可接受的结果:

1) 确保在卸载期间删除合并模块部署的文件 2) 允许在全新安装期间覆盖合并模块部署的文件

任何想法将不胜感激!

【问题讨论】:

    标签: windows-installer uninstallation merge-module


    【解决方案1】:

    这可能不是您希望的答案,但它是一个可以帮助您的想法...

    问题:你真的必须使用合并模块吗? MSM 的想法很棒,但在实践中,它们的效果并不如您所愿。

    相反,嵌入完整的 MSI 通常更简洁,因为 (a) 它们可以在您的应用安装开始之前成功安装和提交,(b) 它们保留对自己版本控制的控制(因此您可以让它们在下一个更新文件版本),(c)您可以使用卸载过程卸载它们(及其所有文件)等等。对于他们作为 MSMS 提供的 Microsoft 库,您始终可以使用可再发行组件的 MSI 版本。

    或者您是否为这个应用程序自己/ves 制作了合并模块?在这种情况下,它们最好作为 MSI 中的组件,因为它们将遵循与其余部分相同的安装和卸载过程。如果您有多个使用相同组件的应用程序,您可以为它们提供相同的组件 ID,并且它们最终会共享(例如,当您有 2 个安装了共享组件的应用程序并且您卸载其中一个时,共享组件只要其他应用程序仍然安装,就会一直存在)。

    【讨论】:

    • 是的,使用链式 msi 是一个很好的解决方案……此时我们在合并模块上投入了大量资金。如果情况变得更糟,我们可能最终会使用这种方法。
    【解决方案2】:

    我过去遇到过类似的问题,即由于[HKLM\SOFTWARE\Microsoft\Windows\CurrentVersion\SharedDlls] 注册表项中的问题条目。卸载后查看合并模块中的任何文件是否在此处列出,引用计数可能已关闭,因此 Windows Installer 认为这些文件应该保留,因为它们正在被另一个应用程序使用。

    这通常是由于在安装构建之间更改组件的“共享”状态,或者使用 MSIZAP(又名 Windows 安装程序清理)在清除程序包时不调整引用计数造成的。

    【讨论】:

    • 我检查了注册表。那里没有列出我们的任何文件。我还检查了我们的合并模块,我们的文件都没有被标记为共享或遗留。谢谢你的建议。
    猜你喜欢
    • 1970-01-01
    • 2016-01-24
    • 2011-02-07
    • 2014-06-21
    • 2016-05-07
    • 1970-01-01
    • 1970-01-01
    • 2021-07-25
    • 1970-01-01
    相关资源
    最近更新 更多