場景新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