我有應用程序A和B,它們都使用共享組件S.如果S是一個DLL程序集,我只需將它的一個副本作爲私有部件。但S是一個EXE,A和B通過一個協議與它交談。當A和B都在運行,他們必須說話的S.可能出現的情況相同的實例:部署EXE在多個應用程序之間共享的最佳方式
- 用戶安裝A和S與它一起安裝,因爲A依賴於S.後來的用戶安裝B,但S沒有安裝,因爲它已經在那裏。
- 用戶安裝A和S與它一起安裝。後來用戶安裝了B,它隨S的更新版本一起被替換爲新版本。
- 安裝了A和B(和S)。用戶卸載B,但由於A仍然存在,所以S被保留。後來用戶卸載A和S也被卸載,因爲沒有應用程序依賴它了。
S的新版本將與舊版本的A和B兼容。如果協議改變,S將支持舊協議和新協議等。
這種情況下最好的部署策略是什麼?我正在使用Windows Installer(MSI)。將S作爲獨立應用程序與單獨的MSI並從其他MSI調用MSI似乎是件好事,但也許有更好的方法。也許MSM?..我想保持安裝簡單。預先感謝您的答案。
尼克,感謝您指向我的WiX。你提出的解決方案看起來很有希望,但是在MSM中使用S並通過共同碎片合併它會更好嗎?這將確保A和B的GUID和S的路徑相同。您的意見是什麼? – Yuriy 2012-03-01 12:45:00
此外我搜索了msidbComponentAttributesSharedDllRefCount,發現這個http://blogs.msdn.com/b/astebner/archive/2005/08/30/458295.aspx。在「2005年9月1日2:30 AM」的評論中,Aaron Stebner說:「Windows安裝程序還爲系統上安裝的所有組件的組件ID保留一個內部參考計數,無論它是否安裝這些文件中包含的文件組件,並且不管MSI組件表中的組件屬性設置是什麼。「,所以也許我不需要設置msidbComponentAttributesSharedDllRefCount? – Yuriy 2012-03-01 12:45:13
爲了回答您的問題,我認爲a)是的,MSM在這種情況下適用於可移植性和重用,b)文章的確似乎表明您不需要設置屬性。 – 2012-03-01 16:42:36