2009-10-09 9 views
8

Derzeit funktionieren alle Upgrades gut, wenn Sie auf eine neuere Versionsnummer aktualisieren, 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.WiX "Major Upgrade" installiert App nicht vollständig auf Downgrade

Hat jemand irgendwelche Ideen, warum das passiert?

Mein Upgrade-Block wie folgt aussieht:

<UpgradeVersion Minimum="0.0.0.0" Maximum="99.0.0.0" Property="PREVIOUSVERSIONSINSTALLED" IncludeMinimum="yes" IncludeMaximum="no" IgnoreRemoveFailure="yes" />

(Der IgnoreRemoveFailure war ein Versuch, dieses Problem zu beheben, aber es scheint nicht, etwas getan zu haben)

In meinem InstallExecuteSequence I ich habe habe <RemoveExistingProducts After="InstallValidate" />

auch Product Id="*" und Package Id="*"

Der Grund für das Downgrade ist, dass die Client-Anwendung die gleiche Version wie der Server ausführen muss, um die Kompatibilität zu gewährleisten, und der gesamte Prozess muss automatisiert werden, wenn die Client/Server-Versionen beim Anmelden nicht übereinstimmen Klicken Sie einfach auf "Ja" und die richtige Version wird heruntergeladen, installiert und gestartet. Dies funktioniert bisher bei Upgrades, aber für Downgrades ist ein zusätzlicher, nicht intuitiver Schritt erforderlich, um die App manuell neu zu starten und dann einen Windows-Installer-Dialog zu sehen, bevor er gestartet wird.

Das Endergebnis ist, dass unabhängig von Upgrade oder Downgrade die aktuelle Version vollständig deinstalliert und die heruntergeladene Version vollständig installiert werden muss. Wenn es einen anderen Weg gibt, dies zu erreichen, ist das auch eine gute Antwort.

+0

ich damit auch heute endlose Probleme haben. WiX hat ein neues "MajorUpgrade" -Element hinzugefügt, das die Fehlersuche erschweren sollte. Wir verwenden das jetzt, aber dennoch haben Downgrades das gleiche Problem wie zuvor. Der Unterschied besteht nun darin, dass ein paar Täter entfernt werden: (1) Das InstallExecuteSequence (2) Das UpgradeVersion-Element. – Trejkaz

Antwort

2

Downgrades zuzulassen gilt nicht als Best Practice, zumindest teilweise, weil es so schwer ist, jede Kombination zu testen, die Sie unterstützen, 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 funktionierende benötigen, gibt es etwas in einem ausführlichen Protokoll für die Downgrade-Installation (oder für die Reparatur - müssen Sie die Protokollierungsrichtlinie des Computers festlegen, um diese erstellt zu bekommen), die das Haupt-Upgrade 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 vorliegen, 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 kleinen Upgrade hindeuten (insbesondere das Hinzufügen einer Komponente in einer neueren Version, die aussieht wie das Entfernen in Ihrer älteren Version - siehe HeathS commentary), obwohl es scheint, dass die 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 hoffen Sie, dass es etwas ist, das Sie von Ihrem echten Produkt entfernen können oder auf andere Weise bearbeitet werden können.

1

Mein Vorschlag ist ein wenig auf der Seite "mach es Arbeit" - Sie könnten eine stille Reparatur benutzerdefinierte Aktion im Falle eines Downgrades versuchen.

+0

Ich konnte nicht finden, wie man eine Reparatur als benutzerdefinierte Aktion plant. Haben Sie Links, die das beschreiben? – Davy8

+0

Ich dachte an etwas wie eine benutzerdefinierte Aktion mit msiexec ausführen und Ihre MSI als Quelle verwenden (msiexec/fa prod.msi/qn) – Gabriel

+0

Ich bin nicht sicher, dass Sie mehr als eine Windows Installer-Instanz gleichzeitig ausgeführt werden können. In diesem Fall gäbe es zwei. Ein Ausführen von innerhalb eines anderen. – w4g3n3r

0

Was passiert, wenn Sie zwei "UpgradeVersion" -Elemente verwenden?

<UpgradeVersion Maximum="CurrentVersion" Property="PREVIOUSVERSIONSINSTALLED" IncludeMaximum="no" /> 
<UpgradeVersion Minimum="CurrentVersion" Property="PREVIOUSVERSIONSINSTALLED" IncludeMinimum="no" /> 
1

Wie haben Sie die Operationen in Ihrer InstallExecuteSequence bestellt?

Wenn Sie die Deinstallation nach der Installation durchführen (wodurch Sie die beste Upgrade-Leistung erzielen), können Probleme auftreten, wenn sich die Dateiversionen in niedrigere Versionen ändern. Das könnte bei deinen Downgrades der Fall sein.

Windows Installer überschreibt ältere Versionen nicht mit neueren Versionen, es sei denn explizit gefragt.

Neuordnung vor der Installation sollte helfen, wenn dies der Fall ist.

+0

Deinstallieren wird vor der Installation bestellt. Hatte dieses Problem vorher mit Upgrades, bis ich es neu plante. Jetzt funktioniert es mit Upgrades, hat aber immer noch Probleme mit dem Downgrade – Davy8

3

Dies ist, was für mich gearbeitet:

<Wix ...> 
    <Product ...> 
    <Property Id="REINSTALLMODE" Value="amus" /> 
    <MajorUpgrade AllowDowngrades="yes" /> 
+0

Dies sollte die akzeptierte Antwort sein. Das funktionierte auch für mich, obwohl ich "dmus" anstelle von "amus" benutzte, um die Dateien nur zu überschreiben, wenn die Version anders ist. Vollständige Liste der Flags hier: https://msdn.microsoft.com/en-us/library/aa371182%28v=vs.85%29.aspx?f=255&MSPPError=-2147217396 –

Verwandte Themen