2010-11-17 120 views
15

我有以下設置一個Visual Studio 2010中部署項目:Visual Studio 2010中 - RemovePreviousVersions

DetectNewerInstalledVersion = True 
InstallAllUsers = True 
RemovePreviousVersions = True 

我建的項目有幾個DLL文件,由於傳統的方式,序列化是實現了文件版本這個項目不能增加(我們正在改變)。

如何獲取安裝項目以完全刪除現有文件(或至少用所有新文件覆蓋)?

也許我需要劇本卸載在安裝程序(可有人聯繫我這樣做,我無法找到)

我已經環顧四周,併爲任何現有的問題,他們都表示「增加文件版本「,但對我而言,這目前不是一種選擇。

回答

20

使用Visual Studio(2008和2010)創建的安裝項目只會在版本號增加時替換文件。顯而易見的解決方案是隻增加所有版本號;但正如你所說,這對你不可行。

.msi文件的行爲基本上由執行RemoveExistingProducts操作的時刻決定。使用VS 2008創建的安裝程序在安裝新產品後安排此操作。其版本尚未增加的修改後的程序集因此不會被替換。有關該更新的行爲更多的細節在此線程描述:

RemovePreviousVersions=True but previous version is not removed from the target machine

要改變行爲,可以修補,以使RemoveExistingProducts動作的前執行創建的.msi文件新產品被安裝(如果您使用Visual Studio 2005創建安裝程序,這實際上就是行爲)。修補可以例如

Dim objInstaller 
Dim objDatabase 
Dim objView 
Dim objResult 

Dim strPathMsi 

If WScript.Arguments.Count <> 1 Then 
    WScript.Echo "Usage: cscript fixRemovePreviousVersions.vbs <path to MSI>" 
    WScript.Quit -1 
End If 

strPathMsi = WScript.Arguments(0) 

Set objInstaller = CreateObject("WindowsInstaller.Installer") 
Set objDatabase = objInstaller.OpenDatabase(strPathMsi, 1) 
Set objView = objDatabase.OpenView("UPDATE InstallExecuteSequence SET Sequence=1450 WHERE Action='RemoveExistingProducts'") 

WScript.Echo "Patching install sequence: UPDATE InstallExecuteSequence SET Sequence=1450 WHERE Action='RemoveExistingProducts'" 
objView.Execute 
objDatabase.Commit 

WScript.Quit 0 
+3

非常感謝。對於其他人來說,我的PostBuildEvent是(將vbs保存到安裝項目目錄中):cscript $(ProjectDir)fixRemovePreviousVersions.vbs $(BuiltOuputPath) – Seph 2010-11-18 00:45:43

+0

@Seph您是如何爲MSI項目添加PostBuildEvent的? – wal 2011-07-14 01:25:17

+0

好的,我發現它隱藏在項目的屬性窗口中。 :) – wal 2011-07-14 01:28:25

1

曾與幾個設置的遷移形式2005 T0 2010 編輯安裝文件(.msi)與ORCA文件,並更改的執行順序同樣的問題:使用運行作爲後步建一個小的VBScript來完成。 InstallInitialize之前刪除ExistingProducts 這已解決了安裝問題。

0

執行完整卸載之前,一個新的安裝是

  1. 去你的「啓動項目」最簡單的方法,單擊鼠標右鍵,選擇「選項」。
  2. 點擊「裝配信息」按鈕。然後遞增「程序集版本」和「文件版本」值,單擊「確定」。
  3. 然後轉到您的安裝項目。確保「DetectNewInstalledVersion」設置爲true,「RemovePreviousVersion」爲真,然後將「版本」從1.0.0增加到1.0.1,然後會出現一個對話框,要求您更新「ProductCode」,只需選擇「是」。確保你「重建」你的啓動項目,然後重建你的設置項目。

這將做到這一點。請享用。然後在你的安裝文件夾上「右鍵單擊」,並選擇「在Windows資源管理器中打開文件夾」並查看「釋放」文件夾下。

+0

不能像OP中提到的那樣遞增版本:'由於實現序列化的傳統方式,此項目的文件版本無法遞增' – Seph 2015-08-11 18:16:16