如何在Visual Studio Installer项目中生成新的ComponentID(VS2015)

时间:2016-11-29 17:59:13

标签: visual-studio-2015 windows-installer vdproj

情景:

  • 我们有一个.vdproj安装程序(实际上我们有很多,有合并 模块,但让我们保持这个简单)。
  • 我们的产品已发布新版本。
  • 我更改了产品代码,升级了代码&版本,重新引导AssemblyInfos和任何COM接口,并更改了默认安装位置。

一切都很好,这些节目并排运作。但是,在卸载时,如果同时安装了两个版本,则不会删除程序菜单和桌面快捷方式,并抱怨由于组件未被删除而无法删除它们。 (参考计数的气味呃?)。

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

看来这些是基于[TARGETDIR]\myfile的哈希值,而不是实际展开的TARGETDIR

E.g。我的TARGETDIR在安装方面实际上有所不同,c:\program files\myCompany\v1.0\myfilec:\program files\myCompany\v2.0\myfile

但是对于安装程序项目,我认为它基于TARGETDIR\filename的哈希值。

我发现了

  • 将输出文件重命名为myfile2会生成不同的ComponentId
  • 或者 - 在安装中创建名为TARGETDIR的{​​{1}}子文件夹会生成不同的ComponentId。但我不确定会产生什么样的影响。

我是否正确地解释了发生了什么,这是我唯一的解决方法吗?与v2.0共享顶级文件夹有什么风险?

微软尚未在一年多时间内更新过这个VS2015组件,也没有开源,我假设他们很高兴它死了,我应该转移到Wix?< /强>

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

1 个答案:

答案 0 :(得分:1)

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

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

微软曾试图弃用安装程序项目,并且受到大众需求的影响,因此在任何情况下,迁移到其他项目的计划都可能是个好主意。