如何最好地在 Visual Studio 安装程序项目 (VS2015) 中生成新的 ComponentID

How best do I generate new ComponentIDs in Visual Studio Installer Projects (VS2015)

场景:

一切都很好,程序并排工作。但是,如果同时安装两个版本,则在卸载时不会删除程序菜单和桌面快捷方式,并抱怨无法删除它们,因为未删除该组件。 (引用计数的味道是吗?)。

虽然这是一个表面问题,但我决定看一下,在 Orca 中我注意到文件的 ComponentIds 是相同的。

看来这些是基于 [TARGETDIR]\myfile 的散列,而不是实际扩展的 TARGETDIR

例如我的 TARGETDIR 在安装时实际上是不同的,c:\program files\myCompany\v1.0\myfilec:\program files\myCompany\v2.0\myfile

但对于安装程序项目,我认为它基于其散列 TARGETDIR\filename

我发现

我是否正确解释了正在发生的事情,这是我唯一的解决方法吗?将顶级文件夹共享为 TARGETDIR 有什么风险?

Microsoft 已经一年多没有更新这个 VS2015 组件,也没有开源它,我假设他们很高兴它死了,我应该转移到 Wix?

更新 这似乎只是合并模块的问题,而不是顶级安装程序的问题。

正如您所发现的,

Visual Studio 不会公开组件 ID。如果组件 ID 存在其他问题(或者 WiX 支持而 VS 不支持的东西),那么可以,迁移到 WiX。但是,在您可能只有一个组件 ID 的情况下,最简单的解决方案是执行 post-构建步骤来更改该组件 ID。使用 Windows 安装程序 SQL 和 WiRunSql.vbs 等脚本(来自 Windows SDK),您只需更改 ID。

https://msdn.microsoft.com/en-us/library/windows/desktop/aa372021(v=vs.85).aspx

Microsoft 曾经试图弃用安装程序项目,但由于大众需求,它们又被带回了,因此迁移到其他项目的计划在任何情况下都是一个好主意。