如何最好地在 Visual Studio 安装程序项目 (VS2015) 中生成新的 ComponentID
How best do I generate new ComponentIDs in Visual Studio Installer Projects (VS2015)
场景:
- 我们有一个 .vdproj 安装程序(实际上我们有很多,合并
模块,但让我们保持简单)。
- 我们的产品发布了新版本。
- 我更改了产品代码、升级代码和版本、重新引导 AssemblyInfos 和任何 COM 接口,并更改了默认安装位置。
一切都很好,程序并排工作。但是,如果同时安装两个版本,则在卸载时不会删除程序菜单和桌面快捷方式,并抱怨无法删除它们,因为未删除该组件。 (引用计数的味道是吗?)。
虽然这是一个表面问题,但我决定看一下,在 Orca 中我注意到文件的 ComponentIds 是相同的。
看来这些是基于 [TARGETDIR]\myfile
的散列,而不是实际扩展的 TARGETDIR
。
例如我的 TARGETDIR
在安装时实际上是不同的,c:\program files\myCompany\v1.0\myfile
和 c:\program files\myCompany\v2.0\myfile
但对于安装程序项目,我认为它基于其散列 TARGETDIR\filename
。
我发现
- 将输出文件重命名为
myfile2
会产生不同的 ComponentId
- 或者 - 在安装中创建名为
v2.0
的 TARGETDIR
子文件夹会产生不同的 ComponentId。但我不确定这会产生什么影响。
我是否正确解释了正在发生的事情,这是我唯一的解决方法吗?将顶级文件夹共享为 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 曾经试图弃用安装程序项目,但由于大众需求,它们又被带回了,因此迁移到其他项目的计划在任何情况下都是一个好主意。
场景:
- 我们有一个 .vdproj 安装程序(实际上我们有很多,合并 模块,但让我们保持简单)。
- 我们的产品发布了新版本。
- 我更改了产品代码、升级代码和版本、重新引导 AssemblyInfos 和任何 COM 接口,并更改了默认安装位置。
一切都很好,程序并排工作。但是,如果同时安装两个版本,则在卸载时不会删除程序菜单和桌面快捷方式,并抱怨无法删除它们,因为未删除该组件。 (引用计数的味道是吗?)。
虽然这是一个表面问题,但我决定看一下,在 Orca 中我注意到文件的 ComponentIds 是相同的。
看来这些是基于 [TARGETDIR]\myfile
的散列,而不是实际扩展的 TARGETDIR
。
例如我的 TARGETDIR
在安装时实际上是不同的,c:\program files\myCompany\v1.0\myfile
和 c:\program files\myCompany\v2.0\myfile
但对于安装程序项目,我认为它基于其散列 TARGETDIR\filename
。
我发现
- 将输出文件重命名为
myfile2
会产生不同的 ComponentId - 或者 - 在安装中创建名为
v2.0
的TARGETDIR
子文件夹会产生不同的 ComponentId。但我不确定这会产生什么影响。
我是否正确解释了正在发生的事情,这是我唯一的解决方法吗?将顶级文件夹共享为 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 曾经试图弃用安装程序项目,但由于大众需求,它们又被带回了,因此迁移到其他项目的计划在任何情况下都是一个好主意。