2016-04-27 84 views
1

我使用WiX Toolset 3.10.2爲我的產品構建安裝程序。防止多次安裝

解決方案中有兩個WIX項目,一個是從編譯的二進制文件構建MSI,另一個是使用WixStandardBootstrapperApplication從MSI構建setup.exe。

如果我增加版本,它工作正常,提供升級。

如果我第二次啓動相同的安裝程序,它工作正常,打開「修改安裝程序」屏幕。

問題是,在重建安裝程序而不增加版本後,它無法檢測到以前的安裝,並且第二次安裝愉快(因此「卸載」控制面板有多個相同的項目)。

如何阻止該問題,並且只允許單個安裝的產品實例?

微星:

<?include "..\Version.wxi"?> 

<Product Id="*" Name="xxx" Language="1033" Version="$(var.vvvVersion)" 
     Manufacturer="yyy" UpgradeCode="0d88cab0-d278-43bb-b891-607bc01c4dec" > 
    <MajorUpgrade DowngradeErrorMessage="A newer version of xxx is already installed." /> 

的EXE:

<?include "..\Version.wxi"?> 

<Bundle Name="xxx" Manufacturer="yyy" Version="$(var.vvvVersion)" 
     UpgradeCode="eac46fb0-09d1-4c29-8fc1-984dddb35e50" 
     IconSourceFile="$(var.SolutionDir)applicationIcon.ico" > 

回答

2

這是離開前一個包後面如果當前安裝包的版本是<捆綁的默認行爲=到已安裝的軟件包版本。

有兩種方法可以解決這個問題。一個實現相對簡單,另一個需要編輯引導程序應用程序的代碼。

正如您已經注意到的,第一種解決此問題的方法是將引導程序的版本與代碼的內部版本號或版本號綁定,以便版本的一部分始終在增加。這樣引導程序總是知道刪除以前安裝的bundle exe。需要注意的是,引導程序應用程序確實考慮到版本的完整4部分,不像MSI放棄第4位數字。這是我在引導程序應用程序中實現的解決方案。

解決此問題的第二種方法是重寫OnPlanRelatedBundle中的requestedState。 (參考https://sourceforge.net/p/wix/bugs/3065/

+1

即使他這樣做(目前有一個討論,以默認啓用),MSI將展示類似的問題,而不升級版本。實際上,我爲您的MSI添加了支持年份,以提取文件版本和捆綁包以提取產品版本: 您也可以更改MSI的升級表以允許相同版本的升級 - 這是測試相同版本的後續版本中的任何更改所必需的。 – Heath