0

我是 InstallShield 开发人员,最近在我的客户机器上遇到了一个奇怪的场景,在我尝试进行全新安装时,我们客户的 InstallShield 应用程序进行了重大升级。详情如下:

  1. 我尝试安装通过 InstallShield 开发的应用程序。它在目标机器上检测到以前的版本并继续进行主要升级方案,但升级失败,因为我的机器上没有以前的版本。

  2. 我检查了详细日志,“IS_MAJOR_UPGRADE”的值设置为“是”

  3. 我检查了添加/删除程序,但没有找到条目。我还检查了注册表编辑器的卸载配置单元,但它也不包含我的产品的任何条目(任何以前的版本)

  4. 我检查了通过我的产品安装的所有二进制文件,并从机器(注册表和文件)中手动删除了它们,但它仍在升级。

  5. 我检查了位置“C:\Windows\Installer”是否有与我的产品相关的任何 msi,但在那里没有找到。

  6. 我在“C:\Windows\Downloaded Installations”中检查了缓存的 msi 并从那里删除了它,但我的产品也在机器上检测到以前的版本。

谁能帮助它设置MSI属性“IS_MAJOR_UPGRADE”=“是”的可能原因是什么从某处获取以前版本的详细信息?

4

2 回答 2

0

维姆,

您的日志文件应标识它为升级标识的卸载代码。总而言之,该产品存在某种类型的注册表遗留问题。如果日志文件包含卸载 guid,请尝试在整个注册表中搜索该 guid,尤其是在您的应用程序支持按用户安装的情况下。

于 2017-02-07T13:17:59.953 回答
0

你检查了所有地方,除了一个重要的地方。MSI 可以将其缓存的 MSI 删除,这无关紧要。MSI 可以使用 ARPSYSTEMCOMPONENT 属性来不在 ARP 中放置条目。没关系。可以删除安装目录。它....(发现我会停下来)。

MSI 使用称为 Darwin Descriptors 的东西在 HKCR\Installer\Products 下跟踪其状态数据。

http://druss.co/2013/10/darwin-descriptor-guid-converter/

开始安装并在欢迎对话框中取消。现在查看您的详细日志并显示 FindRelatedProducts 报告的内容。它会告诉您它正在查找的产品代码的名称。然后,您可以编写一个程序来查询 MSI 以获取有关该产品的信息或计算 darwin 描述符并在注册表中查找它。

于 2017-02-08T11:19:47.870 回答