我有一个基本的MSI安装程序,可以安装我们产品的新版本。如果用户仍使用旧版本(由Installscript安装程序安装),则安装程序将在继续安装新产品之前执行旧产品的卸载字符串。
当用户卸载我们产品的新版本时,这会导致一些问题。当要添加/删除程序并运行卸载程序时,卸载程序将运行并删除文件,但是当刷新添加/删除列表时,产品仍显示为已安装。文件已被删除,但注册表中仍有产品的残留物。
有效卸载产品的唯一方法是通过第三方注册表清理器(也可能是在此基础上构建的脚本)。奇怪的是,如果用户在安装新产品之前手动卸载旧产品,卸载新产品将会正常工作。此外,安装新产品而不在机器上安装旧产品也会导致干净的卸载。
这两种产品有不同的产品代码。你知道是什么原因造成的吗?谢谢!
发布于 2013-04-13 00:09:34
如果“添加/删除程序”中显示未卸载任何内容,则位于以下位置的注册表项仍然存在:
HTLM/Software/Microsoft/Windows/CurrentVersion/Uninstall/{ProductGUID or Name}或者对于64位系统:
HKLM/Software/Wow6432Node/Microsoft/Windows/CurrentVersion/Uninstall/{ProductGUID or Name}在新软件包的卸载部分中,确保它们:
您可以将文件嵌套到Installshield和Wise package studio中。你可以写一个.bat文件,把它放在临时目录中,编写代码,这样当运行它时,它会删除剩下的最后一位。注册表项。
或
创建虚拟机,安装新产品,使用Wise捕获并部署它。
没有看到你的Installshield中的代码,我不知道我能给出什么详细的解释……
GL!
发布于 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/
发布于 2013-04-15 21:28:05
我假设您还没有在新的安装程序中正确设置升级机制。可能您在“升级”菜单的项目上选择了“安装安装程序,然后删除不需要的文件”。如果是这样,请将其更改为“先删除旧设置”,并检查您是否使用了正确的UpgradeCode。或者只是创建一个新的升级项目,专门用于以前版本的安装程序,并在安装前将其删除。
https://stackoverflow.com/questions/15973009
复制相似问题