Hallo;
ich versuche schon seit Stunden, einen Downgrade bei einem MinorUpgrade zu verhindern. Ich habe schon alles mögliche versucht und hier im Forum nach Antworten gesucht. Ohne Erfolg.
Ich habe ein msi-Setup mit Version 8.2.4. Installiert wird über eine Datei update.bat, in der ich prüfe (per Suche in der Registry), ob bereits eine Version installiert ist. Wenn ja, dann soll ein Update durchgeführt werden und es wird folgender Befehl ausgeführt:
msiexec.exe /i "novaGDM 8.2.msi" REINSTALLMODE=vomus REINSTALL=ALL
Wenn nein, dann wird einfach die msi-Datei ausgeführt, so dass eine Neuinstallion gemacht wird.
Das funktioniert auch sehr gut. Allerdings kommt jetzt mein Problem: Wenn ich das msi-Setup von Version 8.2.3 per update.bat installieren will und bereits die Version 8.2.4 installiert habe, dann sollte eigentlich eine Meldung kommen, dass bereits eine höhere Version installiert ist und das Setup soll abbrechen. Da es sich um ein MinorUpgrade handelt, wird leider die Action "FindRelatedProducts" nicht durchgeführt (Log-Meldung: Skipping FindRelatedProducts action: not run in maintenance mode). Daher habe ich keine Möglichkeit die bereits installierte Version zu ermitteln und ein ISPreventDowngrade ist dann nutzlos. Die ältere Version wird also einfach über die neuere drüberinstalliert und ich habe einen inkonstenten Zustand. Die versionierten Dlls und Exes werden nicht überschrieben (bleiben also auf dem Stand von 8.2.4). Alle anderen Dateien, die anders sind, werden aber von Version 8.2.3 verwendet. Ebenso erscheint jetzt die Version 8.2.3 in der Registry und der Systemsteuerung bei den installierten Programmen. Das darf aber auf keinen Fall so passieren!
Also bin ich auf die Idee gekommen, mir die installierte Version aus der Registry zu ermitteln (die Versionsnummer wird bei der Installation in die Registry eingetragen). Diese Versionsnummer wollte ich mit der ProductVersion vergleichen. Wenn die ProductVersion kleiner ist, dann soll das Setup abbrechen. Dazu habe ich eine CustomerAction Type 19 erzeugt mit der entsprechenden Condition ("INSTALLVERSION">"ProductVersion"). Der Vergleich funktioniert aber nicht. Laut Forum werden hier Strings verglichen und keine Ziffern.
Jetzt brauche ich eine neue Idee, wie ich das Problem lösen kann. Es kann doch nicht sein, dass es keinen Mechanismus dafür gibt, bei MinorUpgrades einen Downgrade zu verhindern?!
Kann mir bitte jemand helfen?