2013-02-05 33 views
3

我需要配置我的WiX項目以便能夠安裝該產品的多個次要版本。 IE:我可以安裝1.0,1.1和1.3。如果我嘗試安裝1.2,它會起作用,但如果我使用1.1進行嘗試,它將在繼續之前卸載先前的1.1安裝。配置WiX項目以安裝多個版本,但刪除相同的次要版本

到目前爲止,這是我在我的Upgrade標籤:

<Upgrade Id="$(var.UpgradeCode)"> 
    <UpgradeVersion Minimum="$(var.MajorMinorVersion)" IncludeMinimum="yes" 
     Maximum="$(var.VersionNumber)" IncludeMaximum="no" Property="OLDERMINORFOUND"/> 
</Upgrade> 

UpgradeCode是我WXI文件MajorMinorVersion定義的GUID是一樣的VersionNumber,但與構建在0(1.1。當版本是1.1.12時爲0)。

我猜我有兩個可能性:

我再拍UpgradeVersion標籤或更新當前一個具有最大在下一個小版本,並從搜索中排除:

<UpgradeVersion Minimum="$(var.MajorMinorVersion)" IncludeMinimum="yes" 
     Maximum="$(var.NextMinorVersion)" IncludeMaximum="no"/> 

以某種方式使用自定義操作設置NextMinorVersion。也許使用屬性。

或者,每次次要版本更改時都要手動更改UpgradeCode。或者讓guid的前幾個字符代表版本,其餘的都是唯一的?我懷疑這是一個好主意,雖然...

所以基本上,最好的方法來實現這一點,希望只有一個安裝項目的所有版本?

編輯

我進去看了MajorUpgrade標籤,但我不認爲我可以配置它都在同一時間許多次要版本。任何關於此的燈都是讚賞的。

我也看着作出預處理器擴展,將使用功能操作的版本號,所以我可以這樣做:

<Upgrade Id="$(var.UpgradeCode)"> 
    <UpgradeVersion Property="OLDERMINORFOUND" 
     Minimum="$(var.MajorMinorVersion)" IncludeMinimum="yes" 
     Maximum="$(myprefix.NextMinor($(var.VersionNumber)))" IncludeMaximum="no"/> 
</Upgrade> 

見我對細節的答案。

回答

2

所以我寫了一個擴展按照WiX手冊(Part 1Part 2)。

我做了一個預處理器擴展,它接受版本號字符串(例如:1.2.3.4)並通過解析和分割字符串來操作版本。

所以,現在我可以在我的.wxs文件中這樣寫:

<Upgrade Id="$(var.UpgradeCode)"> 
    <UpgradeVersion Property="SAMEMINORFOUND" OnlyDetect="no" 
     Minimum="$(var.MajorMinorVersion).0" IncludeMinimum="yes" 
     Maximum="$(version.NextMinor($(var.VersionNumber)))" IncludeMaximum="no" /> 
    <UpgradeVersion Property="OLDERVERSIONFOUND" OnlyDetect="yes" 
     Maximum="$(var.MajorMinorVersion).0" IncludeMaximum="no"/> 
    <UpgradeVersion Property="NEWERVERSIONFOUND" OnlyDetect="yes" 
     Minimum="$(version.NextMinor($(var.VersionNumber)))" IncludeMinimum="yes"/> 
</Upgrade> 

<InstallExecuteSequence> 
    <RemoveExistingProducts After="InstallValidate"/> 
</InstallExecuteSequence> 

哪裏version.NextMinor是我的預處理器分機的呼叫。

因此,我的安裝程序只會檢測產品的安裝,除非次要版本匹配,它將被卸載。