如何进行MSI次要升级以及如何应用它?

时间:2016-07-05 21:34:28

标签: c# wix windows-installer msiexec

我想为产品创建Minor Upgrade,我已经定义了一个生成MSI安装程序的WIX项目。

来自Microsoft的说明指出,在次要升级中,不应更改 ProductCode ,但必须更改 ProductVersion

此外,我更改了应用程序的AssemblyInfo以匹配ProductVersion。 AssemblyInfo中的更改涉及AssemblyVersion和AssemblyFileVersion的更改。

在这些更改后,我生成另一个安装程序,现在我有两个安装程序:

  • Installer_1.0.1.msi(A)
  • Installer_1.0.2.msi(B)

我安装了A(双击)然后继续安装B(双击),但我得到了这个: enter image description here

Microsoft声明要应用次要升级,我应该看看如何应用小更新,我选择尝试Reinstalling the product

所描述的步骤建议使用命令
msiexec / I Installer_1.0.2.msi重新安装=所有重新安装模式= vomus

检查msiexec command line reference我发现:

  • v:从源代码运行并重新缓存本地程序包
  • o:如果文件丢失或安装了旧版本,则重新安装
  • m:重写所有必需的计算机专用注册表项
  • u:重写所有必需的特定于用户的注册表项
  • s:覆盖所有现有的快捷方式

    这就是我需要的东西! (我想到了我自己)。

尝试了命令,结果是:

  • 没有文件被更改
  • 控制面板中的版本/程序已更改
  • 安装程序缓存更改,我无法从“控制面板/程序/卸载”
  • 卸载产品

我继续为 a 更改命令参数 o ,因为强制重新安装所有文件

同样的结果。

我的目标是能够在不必手动卸载产品的情况下更改文件(这可以通过MajorUpgrade来实现,但这意味着更改了ProductCode。)

在这个过程中我缺少什么?

更新 如果我将 ProductCode 设置为动态,它将按预期工作,但它将成为主要升级中的次要升级(根据技术库)。

2 个答案:

答案 0 :(得分:1)

这个问题有点老了,但正确的答案是:

你做了什么,有效,如果做得好,两个要点是:

  • 包ID应与新版本(次要升级)不同

  • (但)在生产环境中使用REINSTALLMODE=vemus而不是vamus,后者是最糟糕的练习模式,如果你使用它,那么只能用于快速测试("所有文件覆盖,无论哪个版本")。

所以命令行是: msiexec / I Installer_1.0.2.msi重新安装=所有重新安装模式= vemus

这肯定有效。的"仅" (是)第一次安装后已更改的文件(通过手动编辑或随程序更改)将不会更新(为安全起见)。您将需要其他方法(查找"伴随文件")。

但所描述的虽然可行的小升级方法并不是建议用于生产环境,也许仅适用于MSI专家。

1。 至少,更新设置中所有文件的文件版本,然后你不必依赖" vemus" (或vamus),而且,你不会忽略概述,并且错误的可能性被大大降低。

2。 大多数消息来源(我同意)建议不要使用次要升级,因为主要升级工作更顺畅,特别是非专家。

如果安装性能是一个点,你甚至可以在安装模式之后使用卸载旧版本(意味着"只有",操作" RemoveExistingProducts"在最后一部分设置(请参阅MSDH帮助))。

3。 复杂性的下一步(但你必须处理)是使用补丁(.msp文件)作为非完整更新。

答案 1 :(得分:-1)

对于次要升级,您必须具有相同的 ProductCode UpgradeCode 。但是您已经更改了 ProductVersion 包GUID ,并且MSI包中的二进制文件版本(DLL和EXE文件)应该大于以前的版本