2016-11-29 66 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