2

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

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

此外,如果卸载后合并模块部署的文件仍然存在于硬盘驱动器上,再次安装设置项目不会覆盖合并模块部署的文件。

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

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

任何想法将不胜感激!

4

2 回答 2

1

这可能不是您希望的答案,但它可能会帮助您...

问题:你真的必须使用合并模块吗?MSM 的想法很棒,但在实践中它们并没有您希望的那样工作。

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

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

于 2009-08-21T20:37:45.433 回答
1

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

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

于 2009-08-23T22:23:09.000 回答