Visual Studio 2010中 - RemovePreviousVersions

问题描述:

我有以下设置一个Visual Studio 2010中部署项目:Visual Studio 2010中 - RemovePreviousVersions

DetectNewerInstalledVersion = True 
InstallAllUsers = True 
RemovePreviousVersions = True 

我建的项目有几个DLL文件,由于传统的方式,序列化是实现了文件版本这个项目不能增加(我们正在改变)。

如何获取安装项目以完全删除现有文件(或至少用所有新文件覆盖)?

也许我需要剧本卸载在安装程序(可有人联系我这样做,我无法找到)

我已经环顾四周,并为任何现有的问题,他们都表示“增加文件版本“,但对我而言,这目前不是一种选择。

使用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

曾与几个设置的迁移形式2005 T0 2010 编辑安装文件(.msi)与ORCA文件,并更改的执行顺序同样的问题:使用运行作为后步建一个小的VBScript来完成。 InstallInitialize之前删除ExistingProducts 这已解决了安装问题。

执行完整卸载之前,一个新的安装是

  1. 去你的“启动项目”最简单的方法,单击鼠标右键,选择“选项”。
  2. 点击“装配信息”按钮。然后递增“程序集版本”和“文件版本”值,单击“确定”。
  3. 然后转到您的安装项目。确保“DetectNewInstalledVersion”设置为true,“RemovePreviousVersion”为真,然后将“版本”从1.0.0增加到1.0.1,然后会出现一个对话框,要求您更新“ProductCode”,只需选择“是”。确保你“重建”你的启动项目,然后重建你的设置项目。

这将做到这一点。请享用。然后在你的安装文件夹上“右键单击”,并选择“在Windows资源管理器中打开文件夹”并查看“释放”文件夹下。

+0

不能像OP中提到的那样递增版本:'由于实现序列化的传统方式,此项目的文件版本无法递增' – Seph 2015-08-11 18:16:16