场景新ComponentIDs:如何做最好的我生成Visual Studio安装项目(VS2015)
- 我们已经有了一个.vdproj安装程序(实际上,我们有很多,与合并 模块,但让保持这种简单)。
- 我们有新产品发布。
- 我改变了产品代码,升级代码&版本,重新引导AssemblyInfos任何COM接口,并改变了默认的安装位置。
一切都很好,程序并行工作。但是,在卸载时,如果两个版本同时安装,程序菜单和桌面快捷方式不会被删除,并且抱怨说由于组件未被删除而无法删除。 (引用嗅觉的嗅觉?)。
虽然这是一个化妆品问题,但我决定在Orca看看,我发现文件的ComponentId是一样的。
看起来这些是基于[TARGETDIR]\myfile
的散列,而不是实际扩展的TARGETDIR
。
E.g.我TARGETDIR
是上安装有效的不同,c:\program files\myCompany\v1.0\myfile
和c:\program files\myCompany\v2.0\myfile
但要安装的项目,我认为这是基于其散列关闭TARGETDIR\filename
。
我发现
- 重命名输出文件
myfile2
产生不同的COMPONENTID - 或者 - 创建在安装产生不同的COMPONENTID称为
v2.0
的TARGETDIR
子文件夹。但我不确定会有什么影响。
我有正确的解释发生了什么,这是我唯一的解决方法吗?与TARGETDIR
共享顶级文件夹有哪些风险?
微软还没有更新这个VS2015组件在一年多了,也不开源的话,我假设他们很乐意为它死了,我应该搬到维克斯?
UPDATE 这似乎是只与合并模块的问题,而不是最高级别的安装程序。
+1我没有想到这个答案(wirunsql)。我已经使用了变换(mst),但它们很痛苦,这可能更容易在SQL中“覆盖炸弹”所有组件ID。当然,它必须是确定性hashguidfromstring(oldcomponentid.ToString()+“V2.0”) – GilesDMiddleton
更新:我相信这个问题只有在合并模块体现,我的顶层安装似乎已经产生了新componentIds - 并通过运行后生成脚本,这使得基于新ComponentIds(OldComponentId和合并模块签名),该问题已得到修复 - 谢谢你。 – GilesDMiddleton