首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >在安装过程中卸载以前的产品时,产品不会从windows卸载

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

Stack Overflow用户
提问于 2013-04-12 21:45:43
回答 3查看 1.6K关注 0票数 0

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

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

有效卸载产品的唯一方法是通过第三方注册表清理器(也可能是在此基础上构建的脚本)。奇怪的是,如果用户在安装新产品之前手动卸载旧产品,卸载新产品将会正常工作。此外,安装新产品而不在机器上安装旧产品也会导致干净的卸载。

这两种产品有不同的产品代码。你知道是什么原因造成的吗?谢谢!

EN

回答 3

Stack Overflow用户

发布于 2013-04-13 00:09:34

如果“添加/删除程序”中显示未卸载任何内容,则位于以下位置的注册表项仍然存在:

代码语言:javascript
复制
HTLM/Software/Microsoft/Windows/CurrentVersion/Uninstall/{ProductGUID or Name}

或者对于64位系统:

代码语言:javascript
复制
HKLM/Software/Wow6432Node/Microsoft/Windows/CurrentVersion/Uninstall/{ProductGUID or Name}

在新软件包的卸载部分中,确保它们:

  1. 没有相同的产品ID (您已经说过了,但请确保;)
  2. 如果需要,可以在代码中添加一行以删除遗留的注册表项。

您可以将文件嵌套到Installshield和Wise package studio中。你可以写一个.bat文件,把它放在临时目录中,编写代码,这样当运行它时,它会删除剩下的最后一位。注册表项。

创建虚拟机,安装新产品,使用Wise捕获并部署它。

没有看到你的Installshield中的代码,我不知道我能给出什么详细的解释……

GL!

票数 1
EN

Stack Overflow用户

发布于 2013-04-14 18:55:04

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

我对InstallShield基本微星模式知之甚少。如果它具有更改安装顺序或设置执行操作的时间的能力,那么您应该确保在InstallValidate和InstallInitialize标准操作之间卸载旧产品。如果InstallShield不给你这样的控制权,你可能不得不要求你的用户手动卸载一个旧版本。

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

票数 1
EN

Stack Overflow用户

发布于 2013-04-15 21:28:05

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

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/15973009

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档