我尝试使用带有安静安装的MSI安装程序执行主要升级。使用具有完整用户界面的正常安装时,安装程序已正常运行。在这种情况下,旧产品将被卸载,因为 FindRelatedProducts 操作(来自FolderForm中的UI序列)检测到我以前安装的版本。
当使用msiexec的/ qr开关来抑制对话框并需要用户交互(基本上重用上一版本的设置)时,它会失败:
MSI (s) : Doing action: FindRelatedProducts
Action FindRelatedProducts. Searching for related applications
Action start FindRelatedProducts.
MSI (s) : Skipping FindRelatedProducts action: already done on client side
Action ended FindRelatedProducts. Return value 0.
因此,Windows的已安装软件对话框中会显示两个条目 - 一个用于旧版本和新版本,因此在这种情况下,旧版本未卸载/删除。
是否还有其他我可以使用的msiexec命令开关仍会执行FindRelatedProducts操作?它可以集成到其他地方,以便在如此安静的环境中执行吗?
答案 0 :(得分:2)
我找到了解决问题的方法,并按预期执行升级。
使用msiexec的 / qb 开关启动时, FindRelatedProducts 将被解除,并且升级正常工作正如预期的那样。
我没有找到关于不同UI级别的更好的规范或解释以及对执行的影响,但它可能是调试和解决类似问题的足够信息。
Switch / qr似乎触发了跳过:“跳过FindRelatedProducts操作:已在客户端完成”。
感谢您的支持!
答案 1 :(得分:0)
您似乎专注于症状而非实际问题。只要满足以下两个条件,FindRelatedProducts只需执行一次:每个Upgrade条目的action属性是一个公共(ALL_CAPS)属性,该属性的名称列在属性SecureCustomProperties
中。如果这两个都为真,则第一个UI序列应设置action属性,其值应使其与执行序列保持完整,RemoveExistingProducts应处理并删除该属性中列出的关联产品代码。 (当然,运行/ qb会跳过UI序列并回退到只运行你在答案中描述的执行序列条目。)