【问题标题】:Uninstalling an MSI using msiexec and GUID使用 msiexec 和 GUID 卸载 MSI
【发布时间】:2015-07-14 17:14:27
【问题描述】:

我一直致力于为使用 Octopus Deploy 的客户设置部署管道。客户正在从 Visual Studio 2013 解决方案构建 MSI(遗憾的是,通过使用旧的 .vdproj,但这是另一回事)。我使用 OctoPack 将 MSI 包装在 NuGet 包中,并使用 NuGet.exe 将其发布到 Octopus 内部 NuGet 存储库。

然后,我使用 Octopus 中的“部署 NuGet 包”步骤将包部署到给定环境。现在,作为部署过程的一部分,我还使用template from the Octopus Deploy Libray 安装了 MSI。此模板还使我能够首先从目标计算机上卸载 MSI(如果已安装),这将是部署过程中的自然步骤 2。它使用 msiexec 在 MSI 上执行操作。这就是我的问题所在。考虑以下场景:

  1. 我将包含 MSI 1.0 版的 NuGet 包部署到目标环境
  2. 我稍后想将包含更新的 MSI 1.1 版的 NuGet 包部署到与上述项目符号相同的目标环境中,其中 1.0 版中存在的 DLL 已被删除

卸载旧版本时,我需要为模板提供我要卸载的 MSI 的路径。假设目标环境中不再存在版本 1.0。我可以将模板指向 MSI 的 1.1 版,以卸载 1.0 版吗?

据我从客户那里了解到,已经为 MSI 生成了一个固定的 GUID,即每次 Visual Studio 生成/构建它时,MSI 的 GUID 都是相同的。因此,我想知道 msiexec 是否使用此 GUID 来卸载 MSI,因此,我在模板中指向哪个版本的 MSI 来卸载它并不重要。

这是正确的理解吗?感谢我能得到的任何帮助和澄清。

【问题讨论】:

    标签: visual-studio-2013 deployment windows-installer octopus-deploy


    【解决方案1】:

    据我所知,部署模板只是一种安装 MSI 的方法,其中包含一系列参数,包括 MSI 的路径以及失败时的一些错误消息。

    您不需要 MSI 文件的路径即可将其卸载。您只需要 ProductCode(一个 guid)并使用 msiexec /x {ProductCode}

    但是....当您增加 MSI 安装项目的 ProductVersion 时,它会提示您更改 ProductCode 等。如果您接受这一点并将 RemovePreviousVersions 属性设置为 True,您将获得一个全新安装的升级,但如果已安装旧产品,也会将其卸载。因此,如果您这样做,您甚至不需要卸载旧产品,因为安装新产品即可。

    据我所知,您需要做的就是使用相同的模板来安装每个 MSI 产品、1.0、1.1 等,并且只要您接受 ProductCode 的更改,当您增加它时,始终只需安装它新的和旧的同时卸载。

    【讨论】:

    • 模板需要向其提供 MSI 路径,然后将其用作 msiexec 调用的参数。然后我假设引擎盖下发生的事情 - 根据您的回答 - 是它在注册表中查找与给定 MSI 关联的 ProductCode,然后运行 ​​msiexec /x {ProductCode} 如果它找到了吗?非常感谢有关更改 ProductVersion 和 ProductCode 的信息,然后使用 RemovePreviousVersions - 我不知道。
    • 我真的不知道模板在做什么,但如果它认为它需要 MSI 的路径才能卸载它,那么它是不正确的,并且会使整个过程更加困难。跨度>
    • 我创建了自己的 Powershell 脚本来使用 ProductCode(已修复)卸载 MSI,并且它工作正常。然后我尝试使用模板脚本使用 MSI v.1.1 卸载 MSI v1.0。这导致错误代码“1638”。工作原理:VS2013 更改每个构建/生成的 MSI 上的 PackageCode,导致无法(在某些情况下)使用新的 MSI 来卸载使用旧版本 MSI 包安装的应用程序.我将对此进行更多调查,但我倾向于使用您建议的关于 RemovePreviousVersions 的方法。
    • 我最终使用了您建议的方法@PhilDW。因此,将您的答案标记为已接受。感谢您的帮助!
    猜你喜欢
    • 1970-01-01
    • 2010-10-01
    • 2014-02-24
    • 2011-07-01
    • 1970-01-01
    • 2018-07-18
    • 2012-05-02
    • 2021-09-23
    相关资源
    最近更新 更多