Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/svn/5.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Installation 升级安装导致已安装软件的重复条目(未执行FindRelatedProducts)_Installation_Windows Installer - Fatal编程技术网

Installation 升级安装导致已安装软件的重复条目(未执行FindRelatedProducts)

Installation 升级安装导致已安装软件的重复条目(未执行FindRelatedProducts),installation,windows-installer,Installation,Windows Installer,我尝试使用MSI安装程序执行主要升级,并使用静默安装。当使用具有完整用户界面的正常安装时,安装程序已经运行良好。在这种情况下,旧产品将被卸载,因为FindRelatedProducts操作(来自FolderForm中的UI序列)检测到我以前安装的版本 当msiexec的/qr开关用于抑制对话框和用户交互需求(基本上是重复使用上一版本的设置)时,则失败: MSI (s) : Doing action: FindRelatedProducts Action FindRelatedProducts

我尝试使用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操作?它是否可以集成到其他地方,以便在如此安静的安装中执行?

我找到了解决问题的方法,升级按预期执行

当使用msiexec的/qb开关启动时,将执行FindRelatedProducts,并按预期进行升级

我还没有找到关于不同UI级别的更好的规范或解释,以及对执行的影响,但它可能足够用于调试和解决类似问题

开关/qr似乎触发了跳过:“跳过FindRelatedProducts操作:已在客户端完成”


谢谢你的支持

你似乎把注意力集中在症状上,而不是实际问题上。FindRelatedProducts只需执行一次,前提是以下两件事为真:每个升级条目的action属性是公共(所有大写)属性,并且该属性的名称列在属性
SecureCustomProperties
中。当这两个都为真时,UI序列的第一个属性应设置action属性,其值应使其与执行序列保持一致,RemoveExistingProducts应处理并删除该属性中列出的关联产品代码。(当然,运行/qb将跳过UI序列,并退回到只运行执行序列条目,如您在回答中所述)。

您以前的安装是否与静默安装处于不同的上下文(每个用户与每台机器)中?当您按用户安装时,MSI无法卸载每台计算机安装,反之亦然。这是一个你不得不忍受的技术限制。谢谢你的回答,迪沃。上下文应该相同,只是UI级别不同(5和4)。但是我能看到的是,这个动作没有执行,因为对话框没有显示。它将通过FolderForm NextButton的DoAction触发,但这是不可见的,并且在降低UI级别的情况下执行。另一方面,当FindRelatedProducts应该再次检查和触发时,它会被跳过(如上面的日志片段所示),因为它“已经在客户端完成”。因此,在这里,对于两个UI级别执行相同的操作。这两个操作都是真的,都在CAPS中,并在SecureCustomProperties中列出,然后执行。不幸的是,FindRelatedProducts只返回上面的日志输出,找不到以前安装的产品:“MSI,它返回以下内容:跳过FindRelatedProducts操作:已在客户端完成。”我只能假设在/qr的情况下,FindRelatedProducts被跳过,因为它确实存在于UI序列中(即使由于UI序列减少而未执行)。因此,出现了重复条目。这可能是一种预期行为,但我无法判断是否是这种情况。因此,UI序列的FindRelatedProducts操作之前没有日志记录,只有执行序列跳过了一个。这完全不是我所期望的。我以后必须运行一些测试。:)是的,没错,使用/qr时只发生一次,然后在ExecuteSequence中运行,感谢您的支持!我不知道这是否是故意的,或者是我特定版本的MSI/Windows安装程序中的错误?