2012-03-23 242 views
1

我有一個用WIX創建的安裝程序,它安裝了一堆DLL和配置文件。一旦安裝完成,顯然有時候我想更新JUST DLL文件,並保留原來的配置。WIX覆蓋/更新安裝程序

我看過NeverOverwrite="yes"選項,看起來很有前途,但是我現在遇到了這個問題。當我嘗試在安裝完成後重新運行我的安裝程序時,出現此錯誤。

enter image description here

的問題是,我不想用版本號或產品標識混亂。我只想讓安裝程序重新運行並覆蓋必要的DLL文件。這有意義嗎?

+2

你不只是重新運行你的安裝程序,你重新編譯它,然後嘗試在安裝了以前版本的機器上運行它,更正嗎? – BryanJ 2012-03-23 19:09:20

+0

這是100%正確的BryanJ – aherrick 2012-03-23 20:49:55

回答

2

如果您重新編譯來更新dll,您應該真的考慮更新安裝程序中的版本控制。如果每次編譯dll和安裝程序時都有構建過程更新構建編號,這應該不成問題。

您收到錯誤的原因是因爲產品ID和版本號匹配,但包裝代碼不同。要解決此錯誤,您有以下選項:

  • 更新版本號並將其視爲升級。
  • 更改產品ID(和版本)並將其視爲升級。
  • 如果您設置了軟件包代碼,產品ID和版本可以匹配,但是這並不是真正的建議,尤其是在您修改安裝程序中的文件時。如果您設置了軟件包代碼以匹配以前的安裝程序,那麼您將獲得維護對話框,並且如果您進行了修復或修改,我不確定在執行修復時是否會使用緩存的MSI或重新編譯的MSI,所以我不確定你可以期待什麼結果。
2

與BryanJ說的一樣,錯誤表示您正在安裝與以前安裝的軟件包具有相同產品代碼的新軟件包。

該解決方案很可能只是將產品Id屬性設置爲*。當你想要做minor upgrades的能力時,你只需要穩定的產品ID。

較小的升級不允許對功能組件樹進行任何重組,並且AFAIK只具有快速安裝大型功能的優勢。我們只是做所有升級爲major upgrades,這是更容易管理。

相關問題