2016-11-29 70 views
0

场景新ComponentIDs:如何做最好的我生成Visual Studio安装项目(VS2015)

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

一切都很好,程序并行工作。但是,在卸载时,如果两个版本同时安装,程序菜单和桌面快捷方式不会被删除,并且抱怨说由于组件未被删除而无法删除。 (引用嗅觉的嗅觉?)。

虽然这是一个化妆品问题,但我决定在Orca看看,我发现文件的ComponentId是一样的。

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

E.g.我TARGETDIR是上安装有效的不同,c:\program files\myCompany\v1.0\myfilec:\program files\myCompany\v2.0\myfile

但要安装的项目,我认为这是基于其散列关闭TARGETDIR\filename

我发现

  • 重命名输出文件myfile2产生不同的COMPONENTID
  • 或者 - 创建在安装产生不同的COMPONENTID称为v2.0TARGETDIR子文件夹。但我不确定会有什么影响。

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

微软还没有更新这个VS2015组件在一年多了,也不开源的话,我假设他们很乐意为它死了,我应该搬到维克斯?

UPDATE 这似乎是只与合并模块的问题,而不是最高级别的安装程序。

回答

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

微软试图贬低安装项目一次,他们是由大众的需求带回来的,所以计划迁移到别的东西可能是在任何情况下,一个好主意。

+0

+1我没有想到这个答案(wirunsql)。我已经使用了变换(mst),但它们很痛苦,这可能更容易在SQL中“覆盖炸弹”所有组件ID。当然,它必须是确定性hashguidfromstring(oldcomponentid.ToString()+“V2.0”) – GilesDMiddleton

+0

更新:我相信这个问题只有在合并模块体现,我的顶层安装似乎已经产生了新componentIds - 并通过运行后生成脚本,这使得基于新ComponentIds(OldComponentId和合并模块签名),该问题已得到修复 - 谢谢你。 – GilesDMiddleton