2009-03-02 113 views
2

如果沒有組件更改,升級工作正常,但任何時候組件更改升級失敗並需要用戶手動卸載並重新安裝。Wix主要升級,我做錯了什麼?

一些片段:

<Product Id="*" Name="My Application" Language="1033" Version="!(bind.FileVersion.ClientEXE)" Manufacturer="My Company" UpgradeCode="MYGUID-b94a-44eb-8e92-9286f1d89bbd"> 
    <Package Id="*" Description="My Installer" Comments="Copyright My Company 2008" InstallerVersion="200" Compressed="yes" /> 
    <Upgrade Id="MYGUID-b94a-44eb-8e92-9286f1d89bbd"> 
     <UpgradeVersion Language="1033" Property="UPGRADEFOUND" Minimum="0.0.0.0" Maximum="99.99.99.99" IncludeMinimum="yes" IncludeMaximum="yes" /> 
    </Upgrade> 


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

此外,與下面的註冊表項,有時不刪除在卸載了一些問題,我不明白爲什麼:

 <Component Id="InstalledRegistry" Guid="SOMEGUID-0a17-4c6b-983d-8f3feb3a7724"> 
     <RegistryKey Id="InstalledRegKey" Root="HKMU" Key="SOFTWARE\MyCompany\Client" Action="createAndRemoveOnUninstall"> 
      <RegistryValue Name="Version" Type="string" Value="!(bind.FileVersion.ClientEXE)" KeyPath="yes"/> 
     </RegistryKey> 
     </Component> 

這就是引導程序檢查知道是否使用「REINSTALL = ALL REINSTALLMODE = vamus」啓動msiexec,因此如果它被卸載但註冊表項沒有被刪除,安裝程序會嘗試執行升級並以靜默方式失敗。

讓我知道是否需要


編輯任何詳細信息:有一些其他的問題以後,只有一些文件被更新。將RemoveExistingProducts更改爲After =「InstallValidate」並解決該問題。使它慢一點,因爲它完全刪除了以前的安裝,而不僅僅是升級改變了的文件(它似乎沒有正確檢測到),但它完成了工作。

回答

3

FWIW,您不需要任何命令行參數來執行主要升級。

代碼對我來說看起來不錯,所以可能是版本號沒有改變? (請記住,如果您使用的是4部分版本號,Windows安裝程序只關心三個第一部分)

+0

我明白了,因此重大升級不需要REINSTALL = ALL和REINSTALLMODE。我認爲這可能是問題所在。驗證後會接受 – Davy8 2009-03-02 19:42:10