2009-04-30 74 views
11

我有一個Winforms項目,其中一個.exe文件作爲主輸出。我正在使用部署項目來分發它,但安裝新版本時不會更新.exe文件,這意味着我必須要求用戶手動卸載並安裝新版本。部署項目不更新.exe

下面是我在做什麼:

  • 我增加對輸出項目程序集的版本(這是部署項目的主輸出)
  • 我增加部署項目版本(更新
  • 部署項目設置爲刪除以前的版本
  • 上的.exe「永久性」屬性提示時產品代碼)設置爲False

我確信我在成功之前完成了這個任務,但我現在似乎無法做到。我究竟做錯了什麼?

編輯:我得到了它通過改變文件版本在項目屬性的工作,如this answer

+0

+1爲一個良好的工作解決方案。這很有幫助。 – 2010-10-14 21:42:46

回答

9

很難說什麼可能會導致此。你如何安裝不刪除以前版本的MSI?我會建議運行不適用於詳細日誌記錄的安裝。我想從這樣的命令行運行它:

msiexec /i "project.msi" /l*v "c:\install.log" 

/升告訴MSIEXEC(它是安裝服務)創建日誌,*告訴它記錄的一切,和v告訴它用詳細模式。

運行該程序,並查看日誌文件,它應該告訴您什麼是故障以及爲什麼。你也可以在這裏發佈這個日誌文件,我打賭我們可以一起找到一些東西。

附加問題:日誌文件使它看起來像安裝程序認爲沒有什麼可做的。當你說你更新文件版本時,你在更新什麼?你如何將這些文件進行部署?你在安裝項目中是否包含它們作爲「主要輸出」?或者你是否直接包含程序集?你是否確定了依賴項並自動包含它們,或者是否包含項目輸出?

UPDATE查看這篇文章瞭解需要更改以自動升級MSI的內容。 Question 511789

+1

我在日誌中發現了這個: 文件:C:\ Program Files文件(x86)\ Company \ Project \ Project.exe; \t不會被覆蓋; \t不會打補丁; \t \t現有文件的版本是相同的 我該怎麼做才能讓它看到文件已經改變? – stuartd 2009-04-30 13:14:00

+0

現在看文件。編輯原始問題並將日誌鏈接放在那裏,以便其他人可以更容易地找到它。 – 2009-04-30 14:43:24

+0

感謝您的幫助,我想我現在已經開始工作了。 我注意到您提到的問題陳述爲: 「升級代碼不應該改變」 – stuartd 2009-04-30 15:38:16

1

您是否試圖在應用程序運行時更新?如果是這樣,這是不可能的。您需要考慮更好的方式,例如使用小型外部應用程序來終止當前正在運行的進程,並安裝更新並重新啓動新版本。

+0

不,應用程序未運行。 – stuartd 2009-04-30 12:14:05

1

您可能會嘗試在解決方案上進行重建。你也可以在清理時清理它。我可以看到如果所有更改都是內容文件,情況會如何。如果不是的話,那就無視了。

5

最後在將我的頭靠在牆上撞了幾個小時後終於明白了這一點。

我的問題與此相同,最終解決起來非常簡單。上面的兩個答案使我朝着正確的方向發展,並幫助我找出了自己的問題,但這裏簡而言之。

如果您將RemovePreviousVersion設置爲true,那麼問題很可能出現在程序集信息按鈕下的應用程序設置中。

我跑的日誌爲mohlsen顯示在上面,MSIEXEC/I 「project.msi」/ L * V 「C:\ install.log的」 答案,並結束了相同的反應, 不會被覆蓋;不會修補;現有文件是相等的版本

我指出了正確的方向,但也扔我有點用MFC參考。我正在編寫一個Windows應用程序,並最終將兩個和兩個放在一起,並轉到我正在應用程序選項卡下編寫的應用程序的屬性。有一個名爲Assembly Information的按鈕,可導致程序集版本和文件版本。我增加了這些,現在我的.exe文件更新。

所以你必須做兩件事情,增加你正在編寫的應用程序中的實際彙編版本以及安裝包的版本。

5

一個額外的提示:如果你打開AssemblyInfo.cs文件爲您的項目,並更改的AssemblyVersion到

[裝配:的AssemblyVersion( 「1.0 *」)]

然後將組件版本信息每次構建項目時都會自動更新。然後從同一個文件註釋掉或刪除AssemblyFileVersion條目,因此文件版本默認與程序集版本相同。這意味着每次構建文件時都會自動更新文件版本,因此您只需更新安裝程序版本即可按照您的預期覆蓋文件。