我们有一个Visual Studio 2008,安装和部署,安装项目,它安装最少的文件并运行一些自定义操作。我们还有几个安装项目部署的合并模块项目。每个合并模块都有一个Module Retargetable Folder,其中包含安装了不同组件的唯一子文件夹。
我们遇到的问题是,在卸载安装项目期间,安装项目部署的文件将从硬盘驱动器中完全删除;但是,合并模块部署的文件根本不会被删除。
此外,如果卸载合并模块部署的文件仍然存在于硬盘驱动器上,则再次安装安装项目不会覆盖合并模块部署的文件。
我们必须接受可接受的结果:
1)使其在卸载期间删除合并模块部署的文件 2)允许在全新安装期间覆盖合并模块部署的文件
任何想法都将不胜感激!
答案 0 :(得分:1)
这可能不是你所希望的答案,但这是一个可以帮助你的想法......
问题:你真的必须使用合并模块吗? MSM的想法很棒,但实际上它们的效果并不像你想象的那么好。
相反,嵌入完整的MSI通常更简洁,因为(a)他们可以在您的应用安装开始之前成功安装和提交,(b)他们保留对自己版本控制的控制权(因此您可以让他们在下一个版本中更新文件(c)您可以使用卸载过程卸载它们(及其所有文件)等等。对于他们作为MSMS提供的Microsoft库,总有一个可以使用的可再发行组件的MSI版本。
或者你自己制作合并模块/ ves,这个应用程序?在这种情况下,它们会更好地作为MSI中的组件,因为它们将遵循与其余部分相同的安装和卸载过程。如果您有多个使用相同组件的应用程序,您可以为它们提供相同的组件ID并最终共享(例如,当您有2个安装了共享组件的应用程序并卸载其中一个组件时,共享组件只要其他应用程序仍然安装,它就会一直存在。)
答案 1 :(得分:1)
我在过去遇到过类似的问题,即由于[HKLM\SOFTWARE\Microsoft\Windows\CurrentVersion\SharedDlls]
注册表项中的问题条目。在卸载后查看合并模块中是否列出了任何文件,引用计数可能已关闭,因此Windows Installer认为文件应保留,因为它们正在被其他应用程序使用。
通常,这是因为在安装版本之间更改组件的“共享”状态,或者使用MSIZAP(也称为Windows Installer清理),在清除软件包时不会调整refcounts。