2014-02-19 45 views
2

我目前正在構建通過MSI Windows Installer分發的產品。我們的客戶使用不同的形式(例如我們自己的MSI內),使用像WiX Burn這樣的引導程序/鏈接程序或InstallShield等創作工具來整合該產品。使用MSM而不是MSI有什麼限制/好處?

考慮到這種情況,我一直想知道使用合併模塊(MSM)而不是保留MSI的侷限性和/或好處,以及現在推薦的方法是什麼? 。

+0

希望討論有所幫助 - 請確保你問你的客戶他們喜歡什麼。請記住,將真正的獨立產品安裝到所有客戶的共享位置,或者僅將幾個文件添加到每個產品自己的安裝文件夾中是完全不同的。 –

+0

@Glytzhkof的討論真的很有幫助。我會採取所有的建議。謝謝! –

回答

2

論文合併模塊很好,但在現實世界中,我發現它們笨重得更新,因此容易出錯,因爲它們可能在被發現有缺陷之前被合併到許多設置中。結果我不推薦合併模塊。我更喜歡單個MSI,它可以通過引導程序或批處理文件作爲批處理運行,也可以輕鬆更新。這避免了一般不直觀的各種問題。

我想補充一點,合併模塊安裝在都是爲了共享文件在文件系統中的位置真正共享文件變化很少工作。這些通常是OS運行時間。這些合併模塊通常經過嚴格測試並且工作正常。然而,我經常看到人們使用合併模塊來處理經常變化的文件,然後他們最終以不同的方式以不同的位置以特定的方式進行安裝。這種用法是一團糟,浪費很大。

說了這麼多 - 當我需要高級版本管理時,我確實已經成功地使用了合併模塊,並通過合併模塊將一組文件重複性地,不可變地包含到多個設置中。即使在那之後,我遇到了一段時間的版本問題,其中有一些文件需要更新,隨後,當我將項目交給其他人時,使用了錯誤的合併模塊的小錯誤。由於小的合併模塊錯誤修復,我也遇到了重建所有設置的問題。所有的設置都必須再次通過質量保證。非常令人沮喪的是這種緊密的耦合

如果你的要求很簡單,你是不是承擔了巨大的多產品發佈項目共享一堆文件,使用MSI 代替MSM。由於合併模塊更新或設計問題,更容易理解,處理更少的工作,更多的原子更新以及更少的在許多設置中引入相同錯誤的風險。

+0

感謝您的回答!你有沒有關於版本問題的任何參考?我只想知道,因爲我的產品使用了很多重大升級... –

3

合併模塊沒有什麼問題。他們的主要用途(沒有提到)是分享。如果您希望在多個MSI文件中使用同一組共享文件,則需要使用相同的一組組件GUID來保存共享規則。或者,如果您將文件提供給客戶端供他們在其MSI版本中使用(如Microsoft),則爲他們提供合併模塊。這是MS和其他供應商重新分配合並模塊的原因之一,因此每個人都可以構建MSI並將其安裝在同一系統上,而不會發生文件共享災難。我也看到合併模塊用作MSI文件的通用UI。但主要是確保共享文件的正確使用。我會從經驗告訴你,由於不正確地使用共享文件而導致的災難要比使用合併模塊時感到的困難要嚴重得多。還要注意它們是通用的,可以包含在所有構建MSI文件的工具中。

我從來沒有發現合併模塊很難修補,版本或修復。主要升級不是問題。我看到的唯一潛在問題是構建過程在創建補丁(.msp)構建期間重建合併模塊中的所有二進制文件。如果只有一個二進制文件需要修復,但是您將它們全部編譯,那麼它們的版本和內部可能會發生變化,以便修補程序進程(兩個MSI文件及其內容之間的增量)會告訴您它們需要包含在修補程序中,因爲它們已經改變了,但如果事實上是一個問題,這個問題就可以避免。

+0

感謝@PhilDW抽空回答!因此,考慮到我有不同的客戶集成的產品,是否有一個好的方法來建立一個MSM,然後如果我們想單獨分發我們的產品,則可以使用該MSM構建一個MSI?或者在這種情況下,我們應該直接與MSI?另外,你知道使用MSM是否對MSI有限制?例如自定義操作呢? –

+0

與大多數人一致同意。我仍然發現合併模塊最適合OS運行時和真正共享在共享文件的適當位置的文件。通常我會看到人們使用合併模塊來處理頻繁更改的文件,然後他們最終以特別的方式安裝到不同位置的不同位置。總的混亂和浪費的努力。通過良好的設計合併模塊是合理的。 –

+0

關於MSI對MSI文件的限制,它是蘋果和橘子。只有在構建MSI文件時才能使用MSM - 您無法以其他方式安裝其內容。你對MSM文件有一些我無法弄清楚的假設,這就是爲什麼這個問題令人費解。如果您將MSM文件提供給客戶端,則只能使用它們來構建MSI文件。如果這是有道理的,那就做吧,就像微軟爲人們分發合併模塊來構建包含ATL,C++等Dll的設置支持一樣,所以我們都會正確安裝並正確共享它們。 – PhilDW

相關問題