簡體   English   中英

VS2008安裝項目:卸載以前的MSI

[英]VS2008 Setup Project: Uninstalling the previous MSI

我有一個VS2008安裝項目,該項目創建一個setup.msi,用於安裝WinForms應用程序(C#)。

每次更新版本號時,用戶首先必須卸載以前的版本,然后才能安裝新版本。 否則,我們將收到可怕的“該產品的另一個版本已安裝”消息。

這是我構建新版本的安裝程序時已經在做的事情:

  • 設置RemovePreviousVersions = true和DetectNewerInstalledVersion = true
  • 增量AssemblyVersion (正在部署的exe的)
  • 增量版本 (安裝項目的)
  • 生成一個新的產品代碼 (當版本更改時,由VS提示)
  • 保持UpgradeCode不變

但是它仍然拒絕卸載以前的版本。 那么,我錯過了什么? 還是我做錯了什么?

謝謝!

半解答我自己的問題,僅對感興趣的人有好處:

首先,我發現了一篇關於MSI更新如何工作的非常有用的文章

其次,我找到了一個非常不錯的免費軟件MSI編輯器InstEd ,它向我顯示了我的MSI文件顯然沒有任何錯誤。 (是的,如果我不介意下載整個Windows SDK來獲得它,我可以改用Orca。)

第三,令人煩惱的是,最初的問題似乎已經解決了,我再也無法重現了。 如果恢復正常,如果我再次修復它,我將在此處添加評論!

無論如何,所有這些都帶來了一個新的問題-可能更糟-問題:MSI現在聲稱要更新應用程序,但實際上並沒有安裝任何東西! 解決方案如下:

  • 的AssemblyVersion無所謂,但絕對的AssemblyFileVersion 的作用 :它必須增加,如果要安裝新的文件。 (與VS2005相比,這是VS2008中的更改。例如,請參閱有關Microsoft組的討論 。)
  • 但是,AssemblyFileVersion無法自動增加AssemblyVersion的方式。 將其設置為1.9。*(或任何其他值)只會導致錯誤。 這次來自Stack Overflow的解決方案是將AssemblyVersion設置為自動增量,然后打開AssemblyInfo.cs並完全刪除AssemblyFileVersion屬性。 這將強制文件版本等於程序集版本。

要在以前的版本上安裝它:

  1. 突出顯示安裝項目。
  2. 按F4鍵以獲取屬性。 (右鍵單擊是一個不同的屬性框。)
  3. 更改版本。 對要求更改產品代碼的提示說是。

請記住,即使您重建解決方案,它也不會重建安裝項目。 您需要作為一個單獨的步驟來重建安裝項目。

其次,您不需要每次都遞增AssemblyVersion。 將其設置為2.1。*之類,它將自動執行。

我不是100%熟悉VS 2008安裝項目(我自己使用Advanced Installer-強烈建議使用BTW;他們甚至有免費版本!),但是我以前曾遇到過此內容,因此沒有對其進行非常明確的記錄。

版本號由4部分組成-您一定知道,我確定:Major.Minor.Build.Revision。 Windows安裝程序不檢查REVISION。 如果您正在做的只是增加修訂,它將無法正常工作。 您必須至少增加ProductVersion值的構建。

希望有幫助!

不要忘記增加assemblyFileVersion! 如果您未指定程序集文件版本,則編譯器會假定它與assemblyVersion相同。 但是,如果指定了assemblyFileVersion,則必須將其遞增。

Installer服務正在根據“升級表”的內容進行決策,這就是我要看的地方。 該表中是否包含用於升級代碼的條目,當前安裝版本的產品版本是否在為升級指定的版本范圍內,屬性看起來是否正常(例如,是否未設置msidbUpgradeAttributesOnlyDetect屬性),等等。

MSDN在這里描述了這一切-http: //msdn.microsoft.com/zh-cn/library/aa372379%28VS.85%29.aspx

我來這里是為了尋求相同問題的幫助。 在閱讀了鏈接令人難以置信的有用文章之后,我想我的問題是,我已經安裝了帶有“僅我”選項的先前版本,並且新安裝程序選擇了InstallAllUsers屬性(在Visual Studio項目屬性中)。 因此,從控制面板卸載以前的安裝后,現在可以進行更新了。 也許這可以幫助某人。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM