2009-08-21 52 views
2

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

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

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

我们必须接受的结果:

1)让这个合并模块部署的文件卸载 2拆除期间)允许通过合并模块部署到被覆盖的文件中运行一个全新安装

任何想法,将不胜感激!

回答

1

这也许不是你所希望看到的答案,但它有一个想法,可以帮助你了...

问:你一定要真正的使用合并模块? MSM的想法很好,但实际上它们的效果不如你想象的那么好。因为(a)它们可以在应用程序安装开始前成功安装并提交,(b)它们保留对它们自己的版本控制的控制权(因此您可以让它们更新其中的文件)下一个版本),(c)您可以使用卸载过程等卸载它们(及其所有文件)。对于他们作为MSMS提供的Microsoft库,始终有一个可以使用的可重新分发的MSI版本。

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

+0

确实,使用链接的msi是一个很好的解决方案......我们在这一点上对合并模块进行了大量投资。如果情况变得更糟,我们最终可能会使用这种方法。 – danlash 2009-08-25 13:36:19

1

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

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

+0

我检出了注册表。我们的文件没有在那里列出。我也检查了我们的合并模块,我们的文件都没有被标记为共享或遗留。感谢您的建议。 – danlash 2009-08-25 13:37:36