我是InstallShield开发人员,最近在我客户的机器上遇到了一个奇怪的场景,在我尝试进行新安装时,我们客户的InstallShield应用程序进行了重大升级。详情如下:
-
我尝试安装通过InstallShield开发的应用程序。它在目标机器上检测到以前的版本,并进行了主要升级,但升级失败,因为我的机器上没有以前的版本。
-
我检查了详细日志,"IS_MAJOR_UPGRADE"的值设置为"是">
-
我检查了添加/删除程序,但没有找到任何条目。我还检查了注册表编辑器的卸载配置单元,但它也没有包含我的产品(任何以前的版本)的任何条目
-
我检查了通过我的产品安装的所有二进制文件,并手动从机器中删除了它们(注册表和文件),但它仍在升级。
-
我检查了位置"C:\Windows\Installer"是否有任何与我的产品相关的msi,但没有在那里找到。
-
我在"C:\Windows\Downloaded Installations"中检查了缓存的msi,并从中删除了它,但我的产品在机器上检测到了以前的版本。
有人能帮我确定它设置MSI属性"IS_MAJOR_UPGRADE"="是"的可能原因吗?因为我已经在机器上搜索了所有可能的位置,在那里可以找到与我的产品相关的任何东西,但它仍然从某处获取以前版本的详细信息?
Vyom,
您的日志文件应该标识它为升级标识的卸载代码。长话短说,该产品还有一些类型的注册表。如果日志文件中包含卸载guid,请尝试在整个注册表中搜索该guid,尤其是在应用程序支持按用户安装的情况下。
您检查了除重要位置外的所有位置。MSI可以将其缓存的MSI删除,这无关紧要。MSI可以使用ARPSYSTEMCOMPONENT属性不在ARP中放入条目。没关系。您可以删除安装目录。它(发现我会停下来)。
MSI使用名为Darwin Descriptors的东西在HKCR\Installer\Products下跟踪其状态数据。
http://druss.co/2013/10/darwin-descriptor-guid-converter/
开始安装,然后在欢迎对话框中取消。现在查看详细日志,并显示FindRelatedProducts正在报告的内容。它会告诉你它正在查找的产品代码的名称。然后,您可以编写一个程序来查询MSI以获取该产品的信息,或者计算达尔文描述符并在注册表中查找它。