2011-07-21 206 views
0

我在Visual Studio 2010中創建了一個WPF應用程序。我還創建了安裝項目來安裝此應用程序。安裝項目處理先決條件,複製二進制文件,填充開始菜單和桌面,設置文件關聯和圖標等。所有這一切都很好。Visual Studio 2010安裝項目 - 對現有安裝的次要更新

我現在正在開發一個更新程序,它應該將我的應用程序更新到更高版本(錯誤修復程序等)。我正在使用NetSparkle框架來處理更新過程。我有過程本身的工作,但我有問題創建一個更新MSI文件,做我想做的。

這是我曾嘗試:

  1. 我創建了第二個安裝項目,以建設「更新」 MSI文件的目的。它所做的只是複製新的二進制文件。它有一個屏幕UI,顯然不處理的先決條件,快捷方式,圖標,文件關聯等
  2. 我已經確定了UpgradeCode是一樣的我的主要安裝程序安裝項目的的UpgradeCode
  3. 我已經設置了Version要比我的主要安裝程序更高安裝項目

因此,我構建了更新程序MSI,並將其插入到NetSparkle更新過程中。它似乎工作,但它正在創建一個第二條目爲我的應用程序在控制面板程序和功能(具有較高的版本號),它似乎也重置了我的應用程序的配置設置 - 我需要那些保持完好!正如我所說,這只是一個小錯誤修復更新,而不是一個全新的替代品。

我在做什麼錯?有人能指出我正確的方向嗎?我甚至需要MSI來更新文件嗎? (我應該使用補丁嗎?如果是這樣,我該如何去創建一個?)

更新:我一直在玩RemovePreviousVersions。如果我將它設置爲false,結果如上所述。如果我將它設置爲true,則程序和功能中的重複條目消失,但它也會刪除所有不需要的文件關聯,圖標,開始菜單和桌面鏈接等。它也打破了NetSparkle流程,因爲該應用不會自動重新啓動。真的,我想要做的就是覆蓋安裝文件,就是這樣,無論用戶是升級一個小版本還是X小版本。

回答

3

我建議看看像WIX這樣做。 VS安裝項目適用於簡單的東西,但處理微星安裝的細微差別是非常棘手的。通過WIX,您可以對MSI進行精細控制。

要開始使用,您可以使用其中一種工具導入現有的MSI,也可以從其中一個模板開始入門。我最初通過從VS設置導入開始,然後將部分複製到一個WIX模板中。

他們的網站在upgrade process in their documentation上有一些很好的信息。

這是一篇關於the pros and cons of a minor upgrade的帖子。另有wix tutorial related to wix

就我而言,我也想支持次要升級。我用下面我WIX文件來控制升級檢測邏輯:

<!-- 
     This upgrade table will control how and when the installer detect a major upgrade. 
    --> 
    <Upgrade Id="$(var.UpgradeCode)"> 
     <UpgradeVersion Minimum="$(var.ProductVersion)" Property="NEWPRODUCTFOUND" OnlyDetect="yes" IncludeMinimum="no" /> 
     <UpgradeVersion Minimum="1.0.0" Maximum="$(var.ProductVersion)" Property="UPGRADEFOUND" IncludeMinimum="yes" IncludeMaximum="no" /> 
    </Upgrade> 
+0

很酷,我一定會檢查一下。 – Ross

1

當設置爲true,您使用的是major upgrade RemovePreviousVersions。所以舊版本會自動由您的新版本卸載。如果您想要使用主要升級版本,則新版本應該是完整的獨立安裝程序(其中包括先決條件,快捷方式,圖標,文件關聯等)。

你所描述的是patching。 Visual Studio不支持修補程序,因此您需要手動創建它們。如果你想要一個更簡單的解決方案,有商業化的安裝創作工具,可以爲更新程序和補丁提供直接支持。