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
曾与几个设置的迁移形式2005 T0 2010 编辑安装文件(.msi)与ORCA文件,并更改的执行顺序同样的问题:使用运行作为后步建一个小的VBScript来完成。 InstallInitialize之前删除ExistingProducts 这已解决了安装问题。
执行完整卸载之前,一个新的安装是
- 去你的“启动项目”最简单的方法,单击鼠标右键,选择“选项”。
- 点击“装配信息”按钮。然后递增“程序集版本”和“文件版本”值,单击“确定”。
- 然后转到您的安装项目。确保“
DetectNewInstalledVersion
”设置为true,“RemovePreviousVersion
”为真,然后将“版本”从1.0.0增加到1.0.1,然后会出现一个对话框,要求您更新“ProductCode”,只需选择“是”。确保你“重建”你的启动项目,然后重建你的设置项目。
这将做到这一点。请享用。然后在你的安装文件夹上“右键单击”,并选择“在Windows资源管理器中打开文件夹”并查看“释放”文件夹下。
不能像OP中提到的那样递增版本:'由于实现序列化的传统方式,此项目的文件版本无法递增' – Seph 2015-08-11 18:16:16
非常感谢。对于其他人来说,我的PostBuildEvent是(将vbs保存到安装项目目录中):cscript $(ProjectDir)fixRemovePreviousVersions.vbs $(BuiltOuputPath) – Seph 2010-11-18 00:45:43
@Seph您是如何为MSI项目添加PostBuildEvent的? – wal 2011-07-14 01:25:17
好的,我发现它隐藏在项目的属性窗口中。 :) – wal 2011-07-14 01:28:25