我有 2 个版本的产品“product1”(1.2.2.2 和 1.2.2.3)。
对于升级/降级,product1 使用“reinstall=all reinstallmode=vamus”MSI 参数,因此新文件始终位于安装目录中。
如果我确实从 1.2.2.2 升级到 1.2.2.3 ,则并非所有新文件都适用于安装目录。我只在 Windows 7(x86 和 x64)上遇到这个问题。XP(x86 和 x64)没有问题。
我比较了xp和win7的日志。我发现了以下差异。
XP: SetSourceFolder(Folder=1\PROGRA~1\company~1\product~1\drivers\|program files\companyname\productname\drivers)
win7:执行操作:SetSourceFolder(Folder=C:\Windows\Installer\$PatchCache$\Managed\A7C0B53D545489A48A0183013BEF525E\1.2.2)
这是我的设置。我们的产品支持升级和降级。为了使客户端尽可能简单,我们选择 "REINSTALL=All REINSTALLMODE=vamus" ,以便这些选项同时支持升级和降级。另一个重要的一点是,这个 MSI 没有单独的升级或降级信息。MSI 有平面组件。MSI 中的所有组件都已签名。还嵌入了版本信息。我的问题是 1) windows 安装程序的行为在 win7 上是否发生了变化?2) 安装程序是否仅将 abc 作为版本信息?之后会忽略吗?
另一个重要的一点是,这个 MSI 没有单独的升级或降级信息。MSI 有平面组件。“REINSTALL=All REINSTALLMODE=vamus”参数确保始终运行的 msi 版本组件进入安装目录。到目前为止,这种方法工作了将近 5 年。只有win7有问题。
要重现此问题... 1) 通过 msiexec /i 1.2.2.2.msi 安装 1.2.2.2 2) 降级到 1.2.2.1 没有问题 msiexec /i 1.2.2.1.msi REINSTALL=ALL REINSTALLMODE=vamus 3) 升级到1.2.2.2 导致问题 msiexec /i 1.2.2.2.msi REINSTALL=ALL REINSTALLMODE=vamus 4) 重试再次升级到 1.2.2.2 。这次没有问题。
另一个观察结果是,MSI 中的一个组件说“comp1”有 2 个文件,比如 file1、file2。File1 是组件 comp1 的关键路径。在问题出现时(第 3 步),file1 没有得到更新。但 file2 正在正确更新。
另一个观察。我在不同的不同版本上进行了上述测试。
--> 1.2.1.1 和 1.2.2.1 之间的升级/降级按预期工作 --> 1.2.1.1 和 1.2.1.2 之间的升级/降级没有按预期工作 --> 1.2.2.1 和 1.2.2.2 之间的升级/降级没有按预期工作
如上所述,Windows 安装程序正在考虑最高版本为 abc 升级/降级 abcx 和 abcy 导致 windows-7 出现问题