Windows MSI安装程序远程失败-“;更新的版本;已安装,即使在卸载后也是如此

Windows MSI安装程序远程失败-“;更新的版本;已安装,即使在卸载后也是如此,windows,service,installation,windows-installer,Windows,Service,Installation,Windows Installer,在我们的自动构建中,我开始有一些奇怪的行为。我有一个非常简单的windows service.msi(内置于Visual studio 2010中),它在我们的中央构建/repo服务器上编译,上载到我们的开发服务器,然后从开发服务器上的构建/repo服务器(使用plink通过ssh命令行)远程安装 这项工作持续了很长一段时间,直到最近,自动构建开始100%失败。msi的详细安装日志声明“已安装此产品的较新版本”。我远程访问了开发服务器,检查了msi,并且自己在服务器上手动安装(通过命令行和GUI

在我们的自动构建中,我开始有一些奇怪的行为。我有一个非常简单的windows service.msi(内置于Visual studio 2010中),它在我们的中央构建/repo服务器上编译,上载到我们的开发服务器,然后从开发服务器上的构建/repo服务器(使用plink通过ssh命令行)远程安装

这项工作持续了很长一段时间,直到最近,自动构建开始100%失败。msi的详细安装日志声明“已安装此产品的较新版本”。我远程访问了开发服务器,检查了msi,并且自己在服务器上手动安装(通过命令行和GUI)没有问题。然后,我从“程序和功能”窗口卸载了该服务,验证了文件和条目已被删除,再次尝试从构建服务器远程安装,并再次收到完全相同的错误。该服务只是没有远程安装,因为它认为仍然安装了更新的服务(即使我已经卸载了它),但我可以自己手动安装

编辑

添加一些日志文本

Action start 15:47:16: AppSearch.
MSI (s) (B8:F0) [15:47:16:265]: Doing action: FindRelatedProducts
Action ended 15:47:16: AppSearch. Return value 1.
MSI (s) (B8:F0) [15:47:16:267]: Using cached product context: User non-assigned for product: BA4139E4B48F8264ABFF918A7B583A0B
MSI (s) (B8:F0) [15:47:16:267]: Using cached product context: User non-assigned for product: BA4139E4B48F8264ABFF918A7B583A0B
MSI (s) (B8:F0) [15:47:16:267]: Using cached product context: User non-assigned for product: BA4139E4B48F8264ABFF918A7B583A0B
MSI (s) (B8:F0) [15:47:16:267]: Using cached product context: User non-assigned for product: BA4139E4B48F8264ABFF918A7B583A0B
MSI (s) (B8:F0) [15:47:16:267]: Using cached product context: User non-assigned for product: BA4139E4B48F8264ABFF918A7B583A0B
MSI (s) (B8:F0) [15:47:16:267]: Using cached product context: User non-assigned for product: BA4139E4B48F8264ABFF918A7B583A0B
Action start 15:47:16: FindRelatedProducts.
MSI (s) (B8:F0) [15:47:16:267]: PROPERTY CHANGE: Adding NEWERPRODUCTFOUND property. Its value is '{4E9314AB-F84B-4628-BAFF-19A8B785A3B0}'.
MSI (s) (B8:F0) [15:47:16:268]: Doing action: ERRCA_CANCELNEWERVERSION
Action ended 15:47:16: FindRelatedProducts. Return value 1.
MSI (s) (B8:F0) [15:47:16:269]: Note: 1: 2235 2:  3: ExtendedType 4: SELECT `Action`,`Type`,`Source`,`Target`, NULL, `ExtendedType` FROM `CustomAction` WHERE `Action` = 'ERRCA_CANCELNEWERVERSION' 
Action start 15:47:16: ERRCA_CANCELNEWERVERSION.
MSI (s) (B8:F0) [15:47:16:269]: Product: Product.Services -- Unable to install because a newer version of this product is already installed.

Unable to install because a newer version of this product is already installed.
Action ended 15:47:16: ERRCA_CANCELNEWERVERSION. Return value 3.
Action ended 15:47:16: INSTALL. Return value 3.
MSI(B8:F0)[15:47:16:267]:属性更改:添加NEWERPRODUCTFOUND属性。其值为“{4E9314AB-F84B-4628-BAFF-19A8B785A3B0}”

听起来机器上某处有一个旧版本的安装,尽管它可能不会出现在程序和功能中。我将尝试以下方法,看看是否能解决您的问题:

  • 尝试通过命令行
    msiexec/x{4E9314AB-F84B-4628-BAFF-19A8B785A3B0}

  • 在注册表中搜索产品代码
    {4E9314AB-F84B-4628-BAFF-19A8B785A3B0}
    ,查看是否有以前安装的残余。如果您找到了该产品代码,您可以尝试手动删除这些条目(风险由您自己承担),看看这是否解决了您的问题


  • 我收到了与@Tom收到的完全相同的错误:“-已经安装了更新的版本”

    我能够通过以下确切步骤进行修复: 1.在启用详细日志记录的情况下运行MSI

    msiexec /i "{Path to msi}.msi" /L*V "c:\myLog.log"
    
    二,。打开由上述命令生成的日志文件,并复制行中显示的GUID

    FindRelatedProducts: Found application: {FB0B54D2-9C47-4196-BF0E-B6EEBF754E22}
    
  • 使用复制的GUID,运行以下命令

    msiExec/x{FB0B54D2-9C47-4196-BF0E-B6EEBF754E22}

  • 在这一点上,旧的服务被卸载,然后我继续用MSI安装服务,没有任何问题。希望这有帮助


  • 另一个对我有效的解决方案是:

  • 在VS解决方案中选择安装项目,然后按F4键以显示“属性”窗口
  • 单击此值右侧的按钮,更改ProductCode和UpgradeCode的GUID。将出现一个新的模式窗口,您只需按“新建代码”按钮

  • 请记住,以前的安装将保留在Windows注册表中,您应该卸载它们。这仅适用于由于错误(例如使用设置模板)导致不同VS设置具有相同GUID的情况。

    如果在解决方案资源管理器中选择设置文件并按F4,您将获得设置文件的属性。 将属性“DetectNewServer”设置为false并重新安装


    祝您好运

    通过命令行远程安装时,添加参数
    /lvoicewarmupx log.txt
    ,然后在失败后,检查
    log.txt
    ,以帮助确定失败的原因。我做到了,正如我所描述的。日志只是说明安装了更新的版本,但显然没有。我能想到的唯一一件事是注册表项被弄乱了,但我根本不知道该在注册表中的什么地方乱来(更不用说我不想删除我找到的任何东西)。这花了一段时间,但我最终解决了这个问题。这确实是登记处的问题。您的第一个针对产品代码的msiexec/x建议返回消息“此产品未安装”,因此我在注册表中查找。我删除了所有带有产品代码的条目,但这还不足以修复它。从那里我搜索了用户缓存的产品上下文或它的名称(BA4139E4B48F8264ABFF918A7B583A0B),并删除了其中的每个条目(总共52个条目),现在一切都恢复正常。这很有趣:)接下来的第一步也解决了我的问题。即使在使用installUtil.exe卸载之后,我也无法使用MSI安装新版本的服务。上面的第一步解决了我所有的问题,我根本不需要触摸注册表。谢谢你的提示。工作得很好。我也很沮丧对我来说,这是对ProductCode和UpgradeCode的更新。谢谢