2011-05-03 78 views
14

我正在爲我們的產品創建MSI。我希望產品能夠並排安裝。因此,我可以先安裝1.0.0,然後再安裝1.0.1,以便安裝兩個版本。允許並排安裝的WiX項目

我正在使用WiX創建msi,並想知道如何在Wix中完成這項工作?例如

  • 是否需要爲所有組件創建新Guids
  • 我如何將添加版本信息wix或者我應該完全重命名我的產品?
  • 如何創建項目以便發佈新版本需要wix項目中的最小更改?

問候, 馬亭

回答

9

你應該能夠只是改變了頂級的產品代碼和的UpgradeCode的GUID,使您的兩款產品完全無關,並使用的ProductVersion識別版本脫身。您可以在產品之間共享組件GUID(這就是合併模塊的工作方式),因此您的安裝程序(組件定義)的內容不需要調整,仍然可以共享。

您面臨的主要挑戰是確保兩個分離的產品不會相互干擾,例如具有相同的默認安裝文件夾,開始菜單條目和相同的添加/刪除程序條目。您可以通過在產品名稱屬性中包含產品版本號來實現此目的,在安裝用戶界面中可能看起來有點棘手,但這並不是前所未聞的。

+0

感謝您的回答!我會隨時瞭解我的進展情況。 – Gluip 2011-05-04 06:54:19

+1

我basiccaly做了你所說的:改變升級代碼。除此之外,我還必須更改程序菜單的guid(在開始菜單中)以在卸載時刪除該文件夾(如果我已安裝兩個版本) – Gluip 2011-05-05 07:20:45

+0

如果安裝了版本2並且之後想要安裝舊版本。版本1再次? – Gilad 2014-02-09 17:13:45

0

關於你的第一個問題:不,你不需要。
但是爲什麼?

我很難理解我的並排場景中的Windows安裝程序規則。 您確實需要了解component rules (including when you need to brake them)key paths的概念。 WiX不會將這些方面抽象出來。

This answer確實已經突出了可能的干擾。 我們來看幾個例子。

  • 組件的GUID不需要改變。這打破了組件規則,但它起作用,因爲產品的兩個版本都以相互干擾的方式定義了相同的組件。
  • 不直接支持兩個版本共享的資源。一個突出的例子是使用ProgID的文件擴展名,如here所示。

    如果您更改GUID(在使用「*」GUID時也會發生),則在卸載任一版本時擴展名將被刪除。

    如果您不更改GUID,則擴展名將被保留,但指向最近安裝的版本。您可以使用此選項作爲兩個惡魔中較小的一個,至少支持一種情況,即用戶按照安裝它們的相同順序卸載版本。
    這裏有一個缺陷:擴展需要成爲組件的關鍵路徑。這使得在並行場景中使用ProgID元素會有問題,因爲如果不將ProgID元素與引用文件放在同一個組件中,您將得到ICE69警告。此外,它是WiX的實現細節,它生成的註冊表項將是關鍵路徑。