2010-08-03 79 views
1

我有一個WiX項目,其中包括使用分離的合併模塊安裝x86的Visual C++ 2008運行時組件。從項目中刪除合併模塊時,WiX主要升級無法運行

不幸的是,有一個衆所周知的與MSI v4.5 .MSM的問題。更具體的.msm自定義操作SxSUninstallCA需要20分鐘才能完成卸載。

因此,長話短說,我決定從產品的新版本中刪除.msm,靜靜地安裝VC++組件.exe文件。

如果我只更改了這個東西(當然還有ProductCode),那麼安裝程序不會檢測機器上已安裝的產品並執行正常安裝,而無需首先卸載舊版本。

關於這裏發生了什麼的任何想法?如果MSI檢查UpgradeCode和ProductCode以檢測產品是否已升級到系統中已安裝的另一產品?

回答

1

如果您希望新的MSI升級舊的MSI(因爲您要移除組件,您需要使用主要升級),那麼您需要使用UpgradeCode和Upgrade元素(或在WiX v3.5你可以使用新的MajorUpgrade元素)。

如果您提供有關.wxs文件中的詳細信息,我可以更具體一些。

+0

我的評論太長了,我在下面加了一個答案。感謝您的幫助提前。 – Paolo 2010-08-03 14:47:35

0

該項目設置爲使用UpgradeCode和ProductCode檢測升級。 例如:我建立了的.msi:

ProductCode="05406C5C-8D66-4779-AECA-A93B18729ED5" 
UpgradeCode="05B87404-548E-4BEA-9621-FBF9459F25B0" 
PackageCode="*" 
Version="1.1.1" 

此.msi包含文件和文件夾進行安裝,以及Microsoft_VC90_CRT_x86.msm合併模塊。

然後我建立了另一個的.msi以下參數

ProductCode="7F626A0C-5E69-496D-999E-8E2B14C01FE6" 
UpgradeCode="05B87404-548E-4BEA-9621-FBF9459F25B0" 
PackageCode="*" 
Version="1.1.2" 

相同的文件,合併模塊還包括:它的工作原理,將應用程序更新(卸載以前的版本,安裝新版本)。 當我評論對Microsoft_VC90_CRT_x86.msm的每一個引用時,構建的安裝程序不檢測應用程序的以前版本。

+0

編輯您的問題以添加此信息和升級表信息。這是另一個難題。另外,您在哪裏安排RemoveExistingProducts操作? – 2010-08-04 05:11:37

2

檢查兩個安裝程序中的ALLUSERS屬性是否設置相同。我有與合併模塊相同的問題,並解決了它。