在机器上测试了我的产品的许多安装/卸载后,我结束了一个场景,我没有安装我的产品,至少我在控制面板中看不到它,但当我试图再次安装它时,Wix试图更新一个没有安装的产品。
我已经使用日志执行了msi,然后我发现找到了一个GUID并填充了WIX属性WIX_UPGRADE_DETECTED
的FindRelatedProducts
。
日志的一部分:
FindRelatedProducts: Found application: {MY-GUID}
MSI (c) (24:8C) [07:21:36:885]: PROPERTY CHANGE: Adding WIX_UPGRADE_DETECTED property. Its value is '{MY-GUID}'.
当我使用WIX_UPGRADE_DETECTED
选择要显示的带有对话框(安装或升级)时,它显示了一个升级对话框,但没有安装任何产品。
如果我在另一台机器上测试,执行相同的场景,FindRelatedProducts
没有找到任何产品,这是正确的情况。
我怀疑windows注册表(Regedit)中的某些条目未被清除。你知道Wix是如何检测FindRelatedProducts
的吗?或者为什么Wix在没有安装产品的情况下填充WIX_UPGRADE_DETECTED
?
谢谢!
发布于 2019-04-23 01:01:16
Windows Installer提供了有关注册表的注册信息。它提供了一个API来对该注册进行内省。在本例中,您需要::MsiEnumRelatedProducts()。它将通过该UpgradeCode
为您提供所有相关产品。
然后,您可以通过执行以下操作来卸载这些产品:
msiexec /x {PRODUCT-CODE-GUID}
您应该会发现{PRODUCT-CODE-GUID}
与您作为{MY-GUID}
编辑的内容相同。
注意:这与WiX工具集无关。是100% Windows Installer行为(又称: MSI)。
发布于 2019-04-23 01:33:26
FindRelatedProducts是由Windows Installer而不是WiX执行的。你断言行为是不正确的,这肯定是不正确的。您有一台脏机器,而MSI有一些工件表明它已安装。您的另一台机器是干净的,但不是。
发布于 2019-04-23 22:25:05
我能够确定机器上留下的注册表条目是什么,它们导致了我提到的错误。
它们位于以下位置:
- HKEY_LOCAL_MACHINE\SOFTWARE\Classes\Installer\UpgradeCodes\{OTHER-GUID}
- HKEY_LOCAL_MACHINE\SOFTWARE\Classes\Installer\Products\{OTHER-GUID}
请注意,{OTHER-GUID}不是我的产品代码,而是生成的产品代码,我的产品代码是这些注册表项中的一个值。
只要移除它们,我的安装程序就可以再次工作。
Tks @stein-äsmul这个命令:get-wmiobject Win32_Product
非常有用。
https://stackoverflow.com/questions/55797852
复制相似问题