【问题标题】:Visual Studio 2010 - RemovePreviousVersionsVisual Studio 2010 - RemovePreviousVersions
【发布时间】:2010-11-17 23:32:08
【问题描述】:

我有一个具有以下设置的 Visual Studio 2010 部署项目:

DetectNewerInstalledVersion = True
InstallAllUsers = True
RemovePreviousVersions = True

我正在构建的项目有几个 DLL,由于实现序列化的传统方式,该项目的文件版本无法增加(我们正在更改)。

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

也许我需要在安装程序中编写卸载脚本(有人可以链接我执行此操作吗,我找不到)

我环顾四周,寻找任何现有问题,他们都说“增加你的文件版本”,但对我来说,目前这不是一个选项。

【问题讨论】:

    标签: visual-studio-2010 installation setup-project


    【解决方案1】:

    使用 Visual Studio(2008 和 2010)创建的安装项目只会在版本号增加时替换文件。显而易见的解决方案是增加所有版本号;但正如你所说,这对你来说是不可行的。

    .msi 文件的行为基本上是由执行RemoveExistingProducts 动作的那一刻决定的。使用 VS 2008 创建的安装程序会在安装新产品之后安排此操作。版本未增加的已修改程序集因此不会被替换。此线程中描述了有关更新行为的更多详细信息:

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

    要更改行为,您可以修补创建的 .msi 文件,以便在安装新产品之前执行RemoveExistingProducts 操作(如果您创建了设置,这实际上是行为使用 Visual Studio 2005)。修补可以例如使用作为后期构建步骤运行的小型 VBScript 来完成:

    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
    

    【讨论】:

    • 太棒了,谢谢。对于其他人参考我的 PostBuildEvent 是(将 vbs 保存到安装项目目录): cscript $(ProjectDir)fixRemovePreviousVersions.vbs $(BuiltOuputPath)
    • @Seph 您是如何为 MSI 项目添加 PostBuildEvent 的?
    • 好的,我找到了,隐藏在项目的“属性”窗口中。 :)
    【解决方案2】:

    从 2005 年到 2010 年迁移的几个设置有同样的问题。 使用 ORCA 编辑设置 (.msi) 文件并更改执行顺序。 在 InstallInitialize 之前删除现有产品 这已经解决了安装问题。

    【讨论】:

      【解决方案3】:

      在新安装之前执行完全卸载的最简单方法是

      1. 转到您的“启动项目”,右键单击并选择“选项”。
      2. 单击“程序集信息”按钮。然后增加“程序集版本”和“文件版本”值,单击“确定”。
      3. 然后转到您的设置项目。确保“DetectNewInstalledVersion”设置为真,“RemovePreviousVersion”为真,然后将“版本”递增,例如从 1.0.0 到 1.0.1,然后会出现一个对话框,要求您更新“产品代码” ,只需选择“是”。确保您“重建”您的启动项目,然后重建您的设置项目。

      这样就可以了。享受。然后“右键单击”您的设置文件夹并选择“在 Windows 资源管理器中打开文件夹”并在“发布”文件夹下查看。

      【讨论】:

      • 不能像 OP 中提到的那样增加版本:due to the legacy way that serialization was implemented the file versions for this project can not be incremented
      猜你喜欢
      • 2018-04-15
      • 2020-01-21
      • 1970-01-01
      • 1970-01-01
      • 2017-06-03
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多