【问题标题】:How to make the msi overwrite program if a previous version exist?如果存在以前的版本,如何使 msi 覆盖程序?
【发布时间】:2012-08-31 08:01:53
【问题描述】:

我正在使用 Visual Studio 2010,我正在开发一个 Windows 应用程序,并且在尝试为其创建自动更新程序时遇到了一个严重的问题。

当程序找到一个新版本并尝试安装它时,它无法安装,原因有两个:

1- 该应用程序存在于我的程序文件中。这样窗口就会出现

2- 应用程序已打开“the form that performed the update process”。

问题与版本号无关。

这是关于程序的存在和安装新版本的能力,尽管以前的版本是打开的。

【问题讨论】:

  • 您是否自动更新您的 MSI 文件?如果是,则有一些 GUID 需要更新,如果不是,Setupinterpreter 没有意识到这是一个不同的版本
  • 当应用程序加载时,它会从 xml 文件中搜索新版本,然后下载新的 msi 并打开它进行安装。 @nobs

标签: c# deployment setup-project wizard


【解决方案1】:

要启用自动化major upgrade 机制,您需要增加ProductVersion 并更改ProductCode。这是通过项目属性窗格完成的。

您可以在此处阅读有关升级的更多信息:http://msdn.microsoft.com/en-us/library/windows/desktop/aa370579(v=vs.85).aspx

【讨论】:

    【解决方案2】:

    Cosmin 是正确的,但如果您需要更具体的步骤,请尝试按照其他 Stack Overflow 帖子中概述的步骤操作:

    【讨论】:

      【解决方案3】:

      如果您希望更新现有程序,这称为修补程序,因此您不需要使用作为安装程序的 MSI,而是请查看 MSP 而不是 MSI。

      http://msdn.microsoft.com/en-us/library/windows/desktop/aa370578(v=vs.85).aspx

      对我们来说 - 我们使用了一个加载屏幕并连接到一个 SQL 表,该表拥有一个相关的二进制 .DLL 列表。然后,我使用反射来检查与启动目录中的版本号相比的版本号,如果它较新,则替换它 - 这只是另一个想法,但如果您正在考虑使用某种包更新现有软件,请查看进入MSP。

      【讨论】:

        猜你喜欢
        • 2011-12-12
        • 1970-01-01
        • 2016-10-22
        • 1970-01-01
        • 1970-01-01
        • 2010-10-20
        • 1970-01-01
        • 1970-01-01
        • 2021-04-08
        相关资源
        最近更新 更多