Gegenwärtig funktionieren alle Upgrades gut, wenn auf eine neuere Versionsnummer aktualisiert wird, aber ich bekomme ein seltsames Verhalten beim Downgrade. Es scheint, dass es die vorhandene Version deinstalliert und dann die Version, die ich zu installieren versuche, teilweise installiert, die Haupt-Exe existiert noch nicht am Zielort, aber angekündigte Verknüpfungen werden erstellt. Wenn die angekündigte Verknüpfung geöffnet wird, beendet sie die Installation (vermutlich eine Reparatur) und dann wird es gut laufen.
Hat jemand irgendwelche Ideen, warum das passiert?
Mein Upgrade-Block sieht folgendermaßen aus:
<UpgradeVersion Minimum="0.0.0.0" Maximum="99.0.0.0" Property="PREVIOUSVERSIONSINSTALLED" IncludeMinimum="yes" IncludeMaximum="no" IgnoreRemoveFailure="yes" />
(The IgnoreRemoveFailure war ein Versuch, dieses Problem zu beheben, scheint aber nichts getan zu haben)
In meiner InstallExecuteSequence habe ich <RemoveExistingProducts After="InstallValidate" />
Ich habe auch Product Id="*"
und Package Id="*"
Der Grund für das Downgrade ist, dass die Client-Anwendung dieselbe Version wie der Server ausführen muss, um die Kompatibilität sicherzustellen, und der gesamte Prozess muss automatisiert werden, wenn die Client / Server-Versionen beim Anmelden nicht übereinstimmen Der Benutzer kann einfach auf "Ja" klicken und die richtige Version wird heruntergeladen, installiert und gestartet. Dies funktioniert bisher für Upgrades, aber für Downgrades ist ein zusätzlicher, nicht intuitiver Schritt erforderlich, der darin besteht, die App manuell neu zu starten und dann einen Windows-Installer-Dialog zu sehen, bevor er gestartet wird.
Das Endergebnis ist, dass unabhängig vom Upgrade oder Downgrade die aktuelle Version vollständig deinstalliert und die heruntergeladene Version vollständig installiert werden muss. Wenn es eine andere Möglichkeit gibt, dies zu erreichen, ist das auch eine gute Antwort.
>Downgrades zuzulassen wird nicht als Best Practice betrachtet, zumindest teilweise, weil es so schwer ist, jede Kombination zu testen, die du unterstützt, solange es noch möglich ist, sie zu beheben. Ist es nicht möglich, diesen Fall stattdessen zu erkennen und zu blockieren (vorschlagen, dass die neuere Version zuerst entfernt wird) und nur automatisch vorwärts zu bewegen?
Wenn Sie diese Funktion nutzen müssen, gibt es etwas in einem ausführlichen Protokoll für die Downgrade-Installation (oder für die Reparatur - Sie müssen die Protokollierungsrichtlinie des Computers festlegen, um diese zu erstellen), die das Hauptupgrade bestätigt ( Ich würde in der Nähe von FindRelatedProducts suchen) oder erläutert, warum die Komponente für Ihre Exe nicht installiert ist? Überprüfen Sie unbedingt, ob Protokollzeilen mit SELMGR
vorhanden sind, da dies in einem kleinen Upgradeszenario erklärt werden könnte.
Da eine angekündigte Verknüpfung vorhanden ist, klingt es, als ob die Komponente stattdessen angekündigt wurde. Dies könnte auf Verstöße gegen die Komponentenregeln bei einem kleineren Upgrade hindeuten (insbesondere das Hinzufügen einer Komponente in einer neueren Version, die aussieht wie das Entfernen in Ihrer älteren Version - siehe HeathS Kommentar ) obwohl es scheint, dass das Product/@Id='*'
ein größeres Upgrade erzwingen sollte.
Sie können auch versuchen, in einem Beispielprojekt zu arbeiten, ausgehend von einer Basisversion mit einer einzelnen Funktion, einer einzelnen Komponente und einer einzelnen Datei mit Verknüpfung. Fügen Sie gegebenenfalls der aktualisierten Version eine weitere Komponente und Datei hinzu. Andernfalls erhöhen Sie einfach die Dateiversionen. Dann versuchen Sie Ihr umgekehrtes Szenario. Fügen Sie langsam Dinge hinzu, bis Sie Ihren Schuldigen gefunden haben. Dann hoffe ich, dass es etwas ist, das du von deinem echten Produkt entfernen kannst, oder du kannst anders herum arbeiten.
Wie haben Sie die Operationen in Ihrer InstallExecuteSequence angeordnet?
Wenn Sie die Deinstallation nach der Installation durchführen (wodurch Sie die beste Upgrade-Leistung erzielen), treten möglicherweise Probleme auf, wenn sich die Dateiversionen in niedrigere Versionen ändern. Das könnte bei deinen Herabstufungen der Fall sein.
Windows Installer überschreibt ältere Versionen nicht mit neueren Versionen, es sei denn explizit gefragt.
Die Neuanordnung vor der Installation sollte helfen, wenn dies der Fall ist.
Tags und Links wix windows-installer wix3 downgrade