0

在过去,我使用InstallAnywhere构建了我的设置。我现在切换到了InnoSetup作为我的新安装提供商。如何在InstallAnywhere安装过程中删除InnoSetup安装?

我需要在安装新的安装之前删除整个旧的安装。 Innosetup识别旧的设置,并首先执行“旧”卸载程序,但旧安装程序无法识别Innosetup的卸载程序。由于旧的设置已经在那里,我不能改变这些配置。

如何使InstallAnywhere识别Innosetup卸载程序,但无法更改InstallAnywhere配置?

windows是否有某种“标准方式”用来检查是否已经安装了相同的应用程序?

我已经尝试在Innosetup中创建InstallAnywhere注册表键以“模拟”以前的InstallAnywhere卸载程序 - 但没有成功。

+0

最常用的方法是检查卸载注册表分支中的GUID。您可以将脚本添加到您的Inno安装程序安装程序,该程序将查找以前版本的应用程序的InstallAnywhere注册表项并触发卸载,然后再继续安装。你将不得不修改,但这可能是基地[如何检测旧的安装和提供删除?](http://stackoverflow.com/questions/11739317/how-to-detect-old-installation-and-offer-去除/ 11739624) – RobeN

+0

这已经起作用了,但其他方式却没有。如果用户安装了Innosetup(“新”安装程序),然后尝试使用InstallAnywhere(“旧”安装程序)进行安装,它不会,因为我的旧设置没有某种“检查innosetup”功能他们可以吗?)。他们只能识别InstallAnywhere卸载程序。 – gorootde

+0

另一方面,您将不得不通过Inno Setup以与InstallAnywhere脚本相同的方式添加注册表项(并将其设置为隐藏以避免在卸载列表中出现重复)。但这不是最好的解决方案......尽管在这种情况下,只有这样才能在旧安装程序关闭且不可更新的情况下工作。通过这种方式,InstallAnywhere安装程序将看到应用程序已安装并触发其缺省行为以适应这种情况。 – RobeN

回答

1

我发现InstallAnywhere存储自己的自定义“注册表”的位置。看起来像所有的Flexera产品都使用这种机制。

有一个XML文件C:\Program Files (x86)\Zero G Registry\.com.zerog.registry.xml,其中包含有关所有已安装组件的信息。不幸的是,文件格式没有记录,也没有包含任何对模式定义的引用。

我基本结束了一个解决方法:我正在创建一个“虚拟”InstallAnywhere安装程序,它在InnoSetup安装过程中静默安装。它仅用于做一件事:通过IA设置检测到Beeing,并在卸载期间调用InnoSetup卸载程序。

相关问题