2013-07-31 79 views
2

我使用Wix 3.6開發了一個安裝程序,它成功安裝了應用程序的所有元素。提示在WiX中卸載APP的舊版本

現在,每次我給msi提供更高版本時,我都希望安裝程序提示用戶將其卸載。從現在起我試過了:

<Product 
Id="*" 
Name="!(loc.ProductName)" 
Language="3082" 
Codepage="1252" 
Version="1.0.1" 
Manufacturer="$(var.ProductManufacturer)" 
UpgradeCode="$(var.UpgradeCode)"> 

<Property Id="PREVIOUSVERSIONINSTALLED" Secure="yes" /> 
<Upgrade Id="$(var.UpgradeCode)"> 
    <UpgradeVersion Minimum="1.0.0.0" Maximum="99.9.9.9" IncludeMiminum="yes" IncludeMaximum="no" Property="PREVIOUSVERSIONSINSTALLED" /> 
</Upgrade> 

<InstallExecuteSequence> 
    <RemoveExistingProducts Before="InstallInitialize" /> 
</InstallExecuteSequence> 

此代碼成功地卸載了我的電腦上以前安裝的任何版本。但是它不問用戶他是否確實這樣做。

我需要的是維克斯安裝程序提示用戶稱這樣的消息:

的前一個版本的[產品名稱]安裝。你想卸載它嗎? [是|否]選項。

有沒有什麼辦法提示用戶,並檢查他是否真的想卸載任何以前的版本?

+0

如果用戶點擊「否」會發生什麼? –

+0

WiX甚至支持這樣做嗎?從個人經驗來看,甚至連微軟自己的軟件來構建安裝程序都沒有任何問題,這樣做是正確的。 –

回答

2

Windows安裝程序升級表具有名爲msidbUpgradeAttributesOnlyDetect的屬性位,該屬性位由WiX的UpgradeVersion @ OnlyDetect屬性表示。

正確創作時,這會導致FindRelatedProducts設置您選擇的操作屬性和所檢測產品的ProductCode GUID。儘管如此,它並沒有將它傳遞給RemoveExistingProducts以進行自動刪除。

雖然不是典型的行爲,但沒有什麼能夠阻止您編寫某些在此屬性具有值時觸發的UI。您可以詢問用戶是否要刪除舊版本,如果是,請設置另一個操作屬性以告知RemoveExistingProducts。 (提示:創建一個永遠不會找到產品的升級並劫持它的屬性以注入刪除。)

如果用戶說不,您可以選擇中止安裝或繼續並行安裝到不同的目錄結構。 (Office,Visual Studio等)。

+0

謝謝克里斯託弗。我的第一個想法是將維修/更換/移除窗口替換爲適合我需求的窗口(如您評論)。但我不知道爲什麼,當我安裝應用程序並嘗試安裝新版本時,它會將我推向面板控制中的添加/刪除程序。對我而言,這個選擇是最好的選擇(創建一個自定義界面)。 – Sonhja

+0

回想一下你的解決方案:你能解釋一下如何使用你解釋的解決方案嗎?我迷失在如何應用它。 – Sonhja

+0

對不起,我只能在StackOverflow上回答問題。無法提供培訓。 –

2

我發現this post在解決同樣的問題時很有用。您可以使用您在升級 -tag中設置的上一版本安裝的屬性打開自定義對話框。 (使用標準的歡迎對話框時),通過添加以下代碼做一些這方面的UI標籤內:

<Publish Dialog="WelcomeDlg" Control="Next" Event="NewDialog" Value="OldVersionDlg">PREVIOUSVERSIONSINSTALLED</Publish> 
<Publish Dialog="WelcomeDlg" Control="Next" Event="NewDialog" Value="SetupTypeDlg">NOT Installed AND NOT PREVIOUSVERSIONSINSTALLED</Publish> 

我基於this Wix tutorial我自己的自定義對話框,並結束了與下面的代碼:

<Dialog Id="OldVersionDlg" Width="260" Height="85" Title="[ProductName] Setup" NoMinimize="yes"> 
     <Control Id="No" Type="PushButton" X="132" Y="57" Width="56" Height="17" 
      Default="yes" Cancel="yes" Text="No"> 
      <Publish Event="EndDialog" Value="Exit">1</Publish> 
     </Control> 
     <Control Id="Yes" Type="PushButton" X="72" Y="57" Width="56" Height="17" Text="Yes"> 
      <Publish Event="EndDialog" Value="Return">1</Publish> 
     </Control> 
     <Control Id="Text" Type="Text" X="48" Y="15" Width="194" Height="30"> 
      <Text>A previous version of [ProductName] is currently installed. By continuing the installation this version will be uninstalled. Do you want to continue?</Text> 
     </Control> 
</Dialog> 
+0

你能否給我更多關於你的文章中前兩行代碼的細節?對不起我的英文,但我不知道我明白應該放在哪裏: PREVIOUSVERSIONSINSTALLED misshomme

+0

前兩行應放在描述UI的文件。我基於一個名爲WixUI_InstallDir.wxs的示例,該示例可從https://wix.codeplex.com/downloads/get/762939下的/ src/ext/UiExtension/wxlib下獲得。這些代碼基本上描述瞭如果設置了PREVIOUSVERSIONINSTALLED會發生什麼(在我的情況下,打開一個名爲OldVersionDlg的自定義對話框)。 – Chepe

+0

請參閱http://stackoverflow.com/questions/33690724/wix-custom-dialog-when-previous-version-exists – misshomme