0

In the past I've build my setups using InstallAnywhere. I've now switched to InnoSetup as my new setup provider.

I need to remove the whole old installation before installing the new one. Innosetup recognises the old setup and executes the "old" uninstaller first, but the old setup doesn't recognise Innosetup's uninstaller. As the old setups are already out there, I can't change the configuration of these.

How to make InstallAnywhere recognise the Innosetup uninstaller, without being able to change the InstallAnywhere configuration?

Is there some kind of "standard way" that windows uses to check if the same application is already installed?

I've already tried to create the InstallAnywhere registry keys within Innosetup to "simulate" a previous InstallAnywhere uninstaller - without success.

gorootde
  • 4,003
  • 4
  • 41
  • 83
  • The most popular way is check for GUID in Uninstall registry branch. You can add Script to your Inno Setup Installer that would look for InstallAnywhere registry entries of previous version of your application and trigger uninstallation before proceeding to the installation. You would have to modify, but that could be the base [How to detect old installation and offer removal?](http://stackoverflow.com/questions/11739317/how-to-detect-old-installation-and-offer-removal/11739624) – RobeN Feb 26 '16 at 13:23
  • This already works, but the other way around does not. If a user has installed Innosetup (the "new" Setup) and then tries to install with InstallAnywhere (the "old" Setup), it does not, as my old setups do not have some kind of "check for innosetup" function (how could they?). They can only recognise the InstallAnywhere uninstaller. – gorootde Feb 26 '16 at 13:28
  • For the other way round you would have to add registry entry by Inno Setup the very same way as your InstallAnywhere script does (and set it as Hidden to avoid duplication on Uninstall list). But that is not the best solution... Although the only that would work in this case where old installers are closed and unchangable. Such way the InstallAnywhere setup will see the application is installed and trigger its default behaviour for such situation. – RobeN Feb 26 '16 at 13:31
  • Why do you need the InstallAnywhere-made installer to recognise the Inno Setup-made installer? The Inno Setup installer removes the InstallAnywhere installation, right? Or do you want to allow downgrades back to a version that uses InstallAnywhere? – Martin Prikryl Feb 26 '16 at 13:42
  • Yep I want to be able to downgrade to an "old" setup. I've already added the same registry keys that install anywhere creates on installation. Seems like Installanywhere does not use the uninstall-registry to determine its predecessor. The keys I've added are correctly recognised by windows (Software-> uninstall) works. – gorootde Feb 26 '16 at 14:36
  • InstallAnywhere does definitively not care about registry entries. I've installed with IA, manually deleted the uninstall registry entries, startet setup again: IA recognised the old installation, despite the fact that there were not registry entries anymore. – gorootde Feb 26 '16 at 14:49
  • But Inno Setup won't recognize the Install Anywhere installation either. You had to code that explicitly, right? – Martin Prikryl Feb 26 '16 at 14:56
  • If IA finds the app even when Uninstall key is deleted, that means IA stores this information somewhere else - that can be different registry entry or some files on disk. You'd have to find that place - like Install Shield creates own files in 'Common Files' folder – RobeN Feb 26 '16 at 15:42

1 Answers1

1

I've found the location where InstallAnywhere stores its own custom "registry". Seems like all Flexera products use this mechanism.

There is an XML File C:\Program Files (x86)\Zero G Registry\.com.zerog.registry.xml that contains information about all installed components. Unfortunately the file format is not documented, nor it contains any reference to a schema Definition.

I basically ended up with a workaround: I am creating a "dummy" InstallAnywhere setup, that gets silently installed during the InnoSetup installation. It is used to do only a single thing: Beeing detected by an IA setup, and call the InnoSetup uninstaller during uninstallation.

gorootde
  • 4,003
  • 4
  • 41
  • 83