【问题标题】:Install (MSI) won't install properly over old version安装 (MSI) 无法在旧版本上正确安装
【发布时间】:2012-04-18 00:09:18
【问题描述】:

我已经看过Why doesn't my new Windows Installer file (MSI) install properly over an older version of the MSI? 但这对我没有帮助。

我有一个由安装包 (MSI) 安装的程序(Office 插件)

最初插件和安装项目是在 Visual Studio 2005 中制作的。该解决方案现在已移至 Visual Studio 2010。 当我创建一个新的 MSI 并尝试在旧版本上安装它时,在我使用添加删除程序->修改安装->修复进行修复之前,新版本将无法工作 如果我先删除旧版本,新版本会完美安装。

新的微星能够移除旧版本并顺利安装新版本对我们来说很重要,因为它被多个没有计算机经验的用户使用

RemovePreviousVersion 设置为 True。我已将版本从 3.1.1 升级到 4.0.0,并在此过程中接受了新的 ProductCode。 在 Orca 中,我已将 Reinstallmode 设置为 amus,但似乎没有任何帮助。

谢谢!

【问题讨论】:

    标签: windows-installer


    【解决方案1】:

    如果我理解正确,您说如果对新版本进行修复,升级是否有效?当两个包具有共享组件时,可能会出现这种情况,即您的包组件的 GUID 重复。追踪此问题的最佳方法是创建详细的安装日志,以便我们对其进行分析。

    在修复过程中与旧版本没有冲突,因为它已经被删除并且包中的组件安装正确,这就是为什么之后插件可以工作。

    您能否创建一个详细日志以便我们查看它?

    【讨论】:

    • 嗨。感谢您的答复。如果我对新版本进行修复,升级工作正常是正确的。我已经制作了两个安装的详细日志。可以在这里下载download.ditmer.dk/klu/Installlogs.zip
    • 日志显示具有以下 GUID 的组件由您的应用程序的两个版本共享:{1BB1F0AD-8476-42BE-A165-9116EEDCB560}。我建议您在新版本的包中为该组件生成一个新的 GUID,然后再次测试升级。
    • 发生了什么事,组件被双方共享,新版本跳过了它的安装,但是由于 Windows Installer 中的错误,旧版本的卸载正在删除共享组件,所以你最终得到了丢失的资源。这就是维修后一切正常的原因。生成新的 GUID 应该可以解决问题。
    • 抱歉回复晚了,复活节我已经离开了。我按照建议制作了一个新的 GUID,但不幸的是它似乎没有帮助。
    • 你能再发一个日志,为新的安装包创建吗?其他进行升级的机器上是否也存在问题?机器清洁非常重要,即没有重复测试。
    【解决方案2】:

    奇怪,第二个日志显示没有明显问题,所以应该正确安装升级。要获取更多详细信息,我们需要在操作系统触发自动修复时创建详细日志。要创建此日志,您需要激活全局日志记录,如下所述: http://support.microsoft.com/kb/2545723

    【讨论】:

    • 这里有一个详细的修复日志:download.ditmer.dk/klu/verboseLog.zip
    【解决方案3】:

    我试图从日志中获取更多详细信息,但可以找到很多信息。但是,我找到了另一种方法来检测修复的原因。要获取有关按需安装原因的更多信息,请打开事件查看器(“开始 -> 运行”、“eventvwr.msc”)并在“应用程序”节点下查看“MsiInstaller”日志消息的形式:

    事件类型:警告 事件来源:MsiInstaller 事件编号:1001 描述: 在请求组件“{00030829-0000-0000-C000-000000000046}”期间检测产品“{000C1109-0000-0000-C000-000000000046}”功能“示例”失败

    消息和 GUID 在您的机器上当然会有所不同。然后,您可以检查项目中的 GUID 以查看哪个组件触发了修复。

    【讨论】:

      【解决方案4】:

      使用 Orca Tool 编辑 msi,或许可以解决您的问题。

      首先,我通过在 InstallExcecuteSequence 选项卡下的 InstallValidate 之后和 InstallInitialize 之前设置 RemoveExistingProducts 的序列号来删除现有产品。

      谢谢,Saurabh

      【讨论】:

        【解决方案5】:

        你应该告诉我们更多。您是否在交换版本号、产品、组件、升级和包代码?你用的是什么软件?

        通常,您会在产品中保持相同的升级代码。 您需要在升级表中指定版本号,包括旧/当前升级代码。

        取决于您在哪里安排 RemoveExistingProducts 并且如果您保留组件代码,我可能是一些旧组件没有被替换。

        我总是在 InstallInitialize 之后安排活动。

        检查是否调用了操作 FindRelatedProducts

        this Post,您可以找到使用 WIX 的示例。

        【讨论】:

          猜你喜欢
          • 2017-01-30
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          相关资源
          最近更新 更多