Jump to content


This is a ready-only archive of the InstallSite Forum. You cannot post any new content here. / Dies ist ein Archiv des InstallSite Forums. Hier können keine neuen Beiträge veröffentlicht werden.
Photo

Downgrade verhindern bei MinorUpgrade


5 replies to this topic

huda

huda
  • Full Members
  • 21 posts

Posted 24 May 2017 - 21:58

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?

 



Stefan Krueger

Stefan Krueger

    InstallSite.org

  • Administrators
  • 13,269 posts

Posted 26 May 2017 - 13:27

Warum verwendest du anstatt der update.bat nicht die setup.esxe von InstallShield. Die müsste das alles automatisch machen.



huda

huda
  • Full Members
  • 21 posts

Posted 29 May 2017 - 11:13

Wir verwenden deshalb InstallShield, weil unsere Kunden unbedingt ein msi-Setup benötigen. Warum macht die setup.exe alles automatisch und das msi-Setup nicht? Wozu gibt es denn dann das msi-Setup?

 

Gibt es wirklich keine Möglickeit, in einem msi-Setup zu vermeiden, dass eine neuere Version überschrieben wird? Ich gebe die Hoffnung noch nicht auf.



ANo

ANo
  • Full Members
  • 179 posts

Posted 29 May 2017 - 15:38

Hallo Huda,

es gibt in InstallShield --> Media / Upgrades / Prepare Setup For Upgrade Scenarios / Upgrade Windows Installer Setup --> Kontextmenü

 

Vielleicht hilft das weiter.

 

Gruß

André



huda

huda
  • Full Members
  • 21 posts

Posted 29 May 2017 - 16:09

Hallo André,

 

genau an der Stelle habe ich das ISPreventDowngrade eingebaut. Das nützt nur leider nichts, weil die Action "FindRelatedProducts" bei einem MinorRelease nicht durchgeführt wird und InstallShield dadurch die verwandten Produkte nicht sucht bzw. findet. Installshield bemerkt also gar nicht, dass bereits eine neuere Version installiert ist.

 

Es gibt hoffentlich noch eine andere Möglichkeit, das Problem zu lösen? InstallShield ist doch so mächtig, ich kann nicht glauben, dass es dafür keine Lösung gibt.



Stefan Krueger

Stefan Krueger

    InstallSite.org

  • Administrators
  • 13,269 posts

Posted 30 May 2017 - 10:47

Vorbemerkung: Die Windows Installer Engine, also das Laufzeitsystem, das die msi-Datei ausführt, stammt von Microsoft und ist Teil von Windows. InstallShield kann an deren Verhalten nichts ändern.

 

Man kann ein Minor Update nicht durch Doppelklick auf eine msi Datei ausführen. Man dazu die REINSTALLMODE und REINSTALL Parameter auf der Kommandozeilöe übergeben. Ind er regel machen das bie Benutzer nicht von Hand, sondern man verwendet ein vorgeschaltetes Tool dafür. In deinem Fall update.bat. Du lieferst also schon jetzt keine reine msi Datei aus. Deshalb mein Vorschlag, die update.bat durch die setup.exe zu ersetzen.