在安装过程中卸载以前的产品时,产品不会从Windows卸载

时间:2013-04-12 13:45:43

标签: windows-installer installation installshield uninstall basic-msi

我有一个Installshield Basic MSI安装程序,用于安装我们产品的新版本。如果用户仍处于旧版本(由Installscript安装程序安装),则安装程序将在继续安装新产品之前执行旧产品的卸载字符串。

当用户去卸载我们产品的新版本时,这会导致一些问题。当要添加/删除程序并运行卸载程序时,卸载程序会运行并删除文件,但是在刷新添加/删除列表时,仍会显示产品的安装。这些文件已被删除,但注册表中仍有该产品的残余。

有效卸载产品的唯一方法是通过第三方注册表清理程序(可能还有一个基于此的脚本)。奇怪的是,如果用户在安装新产品之前手动卸载旧产品,则卸载新产品将正常工作。此外,在没有旧产品的情况下安装新产品也将导致干净卸载。

这两种产品有不同的产品代码。可能导致这种情况的任何想法?谢谢!

3 个答案:

答案 0 :(得分:1)

如果添加/删除程序中显示的内容未被卸载,则此处的注册表项仍然存在:

HTLM/Software/Microsoft/Windows/CurrentVersion/Uninstall/{ProductGUID or Name}

或64位系统:

HKLM/Software/Wow6432Node/Microsoft/Windows/CurrentVersion/Uninstall/{ProductGUID or Name}

new 包的卸载部分中,请确保它们:

  1. 没有相同的产品ID(您已经说明但确保;))
  2. 如果需要,请在代码中添加一行以删除遗留的注册表项。
  3. 您可以将文件嵌套到Installshield和Wise包工作室中。您可以编写一个.bat文件,将其放在临时目录中,对其进行编码,以便在运行时删除前面剩下的最后一位。注册表项。

    OR

    创建虚拟机,安装新产品,使用Wise捕获并以这种方式部署。

    如果没有看到您的Installshield中的代码,我不知道我可以提供哪些详细的解释......

    GL !!!

答案 1 :(得分:1)

您可能在新产品安装过程中调用旧产品卸载字符串。 MSI安装脚本记录所有更改,还包括“卸载旧”更改。当您卸载新产品时,这些更改将被还原,因此MSI将恢复在开始安装之前存在的注册表项。这些条目包括旧产品卸载条目。

我对InstallShield Basic MSI模式知之甚少。如果它具有更改安装顺序或设置执行操作的能力,则应确保在InstallValidate和InstallInitialize标准操作之间卸载旧产品。如果InstallShield没有为您提供此类控制,您可能需要让用户手动卸载旧版本。

请参阅有关卸载操作放置的文章: http://jpassing.com/2007/06/16/where-to-place-removeexistingproducts-in-a-major-msi-upgrade/

答案 2 :(得分:1)

我认为您没有在新安装程序中正确设置升级机制。也许您从升级菜单中选择了“安装设置然后删除不需要的文件”。 如果是这样,请将其更改为“先删除旧设置”并检查您是否使用了正确的UpgradeCode。 或者只是为以前版本的安装程序创建一个新的升级项目,并在安装之前将其删除。