首页 > 解决方案 > 欺骗 MSI API 以为安装了升级代码

问题描述

我正在一个 TestAutomation 项目中测试两种产品 (A) 和 (B) 的兼容性。测试验证产品 (B),实际上是被测产品,即使 (A) 已经安装,也可以安装 --> 为此,(B) 的安装程序查找(A)的UpgradeCode是否为当下。

注意:我已经知道 (A) 的 UpgradeCode。我想要做的是将它写入将在安装 (B) 时查找的表中,而不实际安装 (A) 的 MSI - 这有点像集成测试中的“模拟”。

测试在默认情况下尚未安装 (A) 的 VM 上运行。我的目标是编写一个脚本,允许我跳过 (A) 的“真实”安装。

问题:

  1. 我不确定它在哪里查找 UpgradeCode。它没有在注册表中查找它(我已经尝试过那个黑客)。我在 Win32_Property 表中找到了 UpgradeCode ......这是正确的地方吗?

  2. 我的猜测是我必须模拟API调用,来自(A)的原始MSI设置它的UpgradeCode......知道它是如何工作的吗?可能使用 Powershell 脚本。我已经看到在线人员可以通过调用gwmi(然后使用 put)或swmi来修改 WMI 属性表,但到目前为止我的所有尝试都失败了。

笔记:

标签: powershellwindows-installerautomated-tests

解决方案


在不安装实际 A 的情况下进行测试的最简单方法是生成一个具有相同 UpgradeCode 和 ProductCode 的小型 MSI 并安装它。当您可以做真实的事情时,我不明白为什么要“伪造”它。

如果您想在 A 已经安装时阻止安装 B,您可以将 A 的 UpgradeCode 添加到 B 且 OnlyDetect=yes,这将设置一个可用于阻止安装 B 的属性。目前尚不清楚不安装 B 的上下文是什么,您是否有外部启动器、引导程序或正在使用哪个工具来生成 MSI(因为如果您想跳过 B 如果安装了 A,某些工具会为您提供帮助)它们内置的检测功能)。


推荐阅读