2

我已经使用InstallShield 2011 Basic MSI成功创建了标准补丁。我在检测已安装的应用程序的早期版本时遇到了问题。例如,我有一个名为XYZ的应用程序,其基本版本为3.7.0.188,我想用3.7.0.201版本进行修补。我可以成功地将这个补丁应用到3.7.0.188的基础上。现在,如果我安装早期版本的应用程序XYZ(3.7.0.173)并尝试应用我的修补程序,它将失败。我希望能够检测到这一点,并显示一个无法完成的对话框,或者我的想法是错误的?什么是正确的方法来做到这一点?我觉得InstallShield应该能够固有地做到这一点。使用标准补丁时如何检测以前的版本

+0

顺便说一句,“它失败”是非常不具描述性的。提供任何您看到的错误消息(它仅仅是“安装程序中断”对话框?)以及在详细日志中看到的任何相关错误代码会更加清楚。 –

+0

这是我得到的错误: 错误1328.错误应用修补程序到文件C:\ Config.Msi \ PTC90A.tmp。它可能已通过其他方式更新,并且不能再由此修补程序修改。有关更多信息,请联系您的补丁供应商系统错误:-1072807676 – user1893305

回答

0

正常情况下,当您尝试将修补程序应用于与其目标不匹配的版本时,Windows Installer应该会显示一条消息,类似于“由于要升级的程序可能会丢失,无法通过Windows安装程序服务安装升级修补程序,或者升级补丁程序可能会更新该程序的不同版本......“您是否收到此消息?

这是由我的知识,而不是由InstallShield操作系统控制。

+0

我没有收到该消息。当我比较产品代码和升级代码时看到日志时,它说两者都是有效的,但是当它再次查找产品代码时(在注册表中),它无法在数据库中找到它。我不确定它指的是哪个数据库。我试图在Flexera论坛上获得帮助,但获得答复需要很长时间。 – user1893305

+0

是的,在注册表中查找所有信息。数据库是MSI包,它实际上包含表,就像数据库一样。你能附上这个安装的详细日志吗? –

+0

日志很漂亮,我可以在这里粘贴或者有附加方法吗? – user1893305

0

有一点需要研究的是,如果您使用次要升级补丁而不是上述小型更新补丁,您会看到不同的行为。由于您尚未更改ProductVersion的前三个部分之一,因此您正在提供一个小更新。这些很难推理,因为Windows安装程序经常认为版本是等同的,并且根本不会做任何事情来阻止您进入“错误”的方向。

请参阅Patching and Upgrades以及关于小更新和小升级的链接文章。