我正在测试TestAutomation项目中两个产品(A)和(B)的兼容性。该测试验证了产品(B),实际上是被测产品,可以安装,尽管已经安装了(A) - >为此,(B)的安装人员会查看(A)的UpgradeCode是否存在。
注意:我已经知道(A)的UpgradeCode。我想要做的是将它写入将在安装(B)时查找的表中,而不实际安装(A)的MSI - 这有点像“模拟”集成测试。
测试正在VM上运行,默认情况下尚未安装(A)。我的目标是编写一个脚本,允许我跳过(A)的“真实”安装。
问题:
我不确定UpgradeCode的外观。它是不在注册管理机构中查找(我试过这个黑客攻击)。我在Win32_Property表中找到了UpgradeCode ...是否适合查看?
我的猜测是我必须模仿API调用,来自(A)的原始MSI设置其UpgradeCode ...任何关于它如何工作的想法?可能使用Powershell脚本。我看到在线人员修改WMI属性表可以调用gwmi(然后使用put)或swmi,但到目前为止我的所有尝试都失败了。
注意:
答案 0 :(得分:3)
在不安装实际A的情况下进行测试的最简单方法是使用相同的UpgradeCode和ProductCode生成一个小的MSI并安装它。我不明白为什么你想"假的"当你可以做真实的事情时。
如果要在安装A时阻止安装B,可以使用OnlyDetect = yes将A的UpgradeCode添加到B,这将设置一个可用于阻止安装B的属性。目前还不清楚不安装B的上下文是什么,无论你有外部发射器,引导程序,还是使用哪个工具来生成MSI(因为如果你想跳过B,有些工具会给你帮助) A安装了内置的检测功能)。
答案 1 :(得分:1)
您可以通过 WMI (Win32_Property
WMI表)或 MSI API (Windows Installer Database
- 注册表)获取UpgradeCode。
我不会出于任何原因破解Windows Installer数据库中的升级代码 。为什么需要伪造UpgradeCode? product A
的安装是否非常大?
WMI / PowerShell / VBScript :
MSI API :