设想:
- 我们有一个 .vdproj 安装程序(实际上我们有很多,带有合并模块,但让我们保持简单)。
- 我们有一个新版本的产品。
- 我更改了产品代码、升级代码和版本,重新引导了 AssemblyInfos 和任何 COM 接口,并更改了默认安装位置。
一切看起来都很好,程序并排工作。但是,如果同时安装了两个版本,则在卸载时不会删除程序菜单和桌面快捷方式,并抱怨由于未删除组件而无法删除它们。(引用计数的味道嗯?)。
虽然这是一个外观问题,但我决定看一看,在 Orca 中我注意到文件的 ComponentIds 是相同的。
看起来这些是基于 的哈希[TARGETDIR]\myfile
,而不是实际扩展的TARGETDIR
.
例如 myTARGETDIR
在安装时实际上是不同的,c:\program files\myCompany\v1.0\myfile
并且c:\program files\myCompany\v2.0\myfile
但是对于安装程序项目,我认为它是基于它的 hash off TARGETDIR\filename
。
我发现
- 重命名输出文件以
myfile2
生成不同的 ComponentId TARGETDIR
或者 - 在安装中创建调用的子文件夹v2.0
会产生不同的 ComponentId。但我不确定这会产生什么影响。
我是否正确解释了正在发生的事情,这是我唯一的解决方法吗?将顶级文件夹共享为TARGETDIR
.
微软一年多没有更新这个 VS2015 组件,也没有开源它,我假设他们很高兴它死了,我应该搬到 Wix 吗?
更新 这似乎只是合并模块的问题,而不是顶级安装程序。