Sie installieren die neue Version in der Erwartung, dass sie die alte ersetzt, aber das tut sie nicht.
Plötzlich erscheinen beide Versionen in der Liste der hinzugefügten oder entfernten Programme, die Benutzereinstellungen geraten durcheinander oder die Anwendung verhält sich unvorhersehbar.
Anwendungsupgrades sehen oft einfach aus, aber hinter den Kulissen beruhen sie auf einem empfindlichen Gleichgewicht von Versionslogik, GUIDs und Deinstallationsbedingungen.
Selbst eine kleine Inkonsistenz kann Spuren der alten Version hinterlassen, die zu unvorhersehbaren Ergebnissen führen und die Stabilität beeinträchtigen.
Das macht die Veredelung zu einem der technisch anspruchsvollsten Teile der Paketierung – ein Prozess, der Präzision, Konsistenz und Liebe zum Detail erfordert.
Warum das so ist
Ein Anwendungs-Upgrade sieht in der Theorie einfach aus, ist aber in der Praxis einer der anfälligsten Paketierungsprozesse.
Alles hängt davon ab, wie das ursprüngliche Installationsprogramm erstellt wurde und wie die Upgrade-Logik definiert ist.
Wenn auch nur ein Glied in dieser Kette fehlt, ist das Ergebnis kein sauberer Ersatz, sondern eine zweite, parallele Installation.
Meist sind ein paar technische Details schuld:
- Inkonsistente Produktbezeichner.
Jede MSI hat drei wichtige GUIDs: ProductCode, PackageCode und UpgradeCode.
Wenn sich der UpgradeCode zwischen verschiedenen Versionen ändert oder, was noch schlimmer ist, innerhalb derselben Version dynamisch generiert wird, erkennt Windows das neue Installationsprogramm nicht mehr als Ersatz für das bestehende.
Infolgedessen wird es von Windows als separates Produkt installiert, was häufig zu Versionsstapeln und widersprüchlichen Komponenten führt. - Geänderte Namenskonventionen.
Anbieter ändern manchmal das Feld “Produktname” oder “Herausgeber” mit jeder Version.
Diese einfache Änderung unterbricht die Kontinuität der Versionsverfolgung, da das System die neue Version nicht mehr als Teil derselben Produktlinie betrachtet. - Unvollständige Haupt-Upgrade-Logik.
Die Upgrade-Tabelle in MSI legt fest, welche Produkte vor der Installation entfernt werden sollen.
Wenn diese Tabelle falsch konfiguriert oder ausgelassen wird, wird die neue Version installiert, ohne die alte zu berühren.
Sogar die Reihenfolge von Aktionen wie RemoveExistingProducts in der Sequenztabelle hat Einfluss darauf, ob der Prozess korrekt funktioniert. - Fehlen einer eingebauten Upgrade-Logik in EXE-Installationsprogrammen.
Im Gegensatz zu MSI enthalten viele EXE-basierte Setups keine internen Mechanismen für die Handhabung von Upgrades.
Infolgedessen wird die neue Version unabhängig installiert, wobei die Komponenten der alten Version unberührt bleiben.
Jedes dieser Details mag bei der Paketierung einer einzelnen Version unbedeutend erscheinen, aber in ihrer Gesamtheit entscheiden sie darüber, ob der Upgrade-Prozess vorhersehbar funktioniert oder zu stillen Inkonsistenzen führt, die erst viel später auftauchen.
Wie es sich in realen Umgebungen zeigt
Wenn die Upgrade-Logik nicht richtig definiert ist, scheinen die ersten Symptome unauffällig zu sein, führen aber schließlich zu langfristiger Instabilität.
Zwei Versionen derselben Anwendung können unbemerkt nebeneinander existieren. Alte Registrierungseinträge und Dateien bleiben unangetastet. Verknüpfungen können auf veraltete ausführbare Dateien verweisen, und Deinstallationsvorgänge entfernen nur einen Teil des installierten Programms.
Oberflächlich betrachtet mag das Upgrade erfolgreich sein, aber die Anwendung läuft weiterhin als älteres Build, in dem die alten Komponenten noch vorhanden sind.
Diese kleinen Inkonsistenzen führen zu technischen Schulden, die mit der Zeit wachsen und die Verwaltung jeder neuen Version erschweren.
Für Endbenutzer sieht es wie eine kleine Panne aus. Für Softwarepaketierer zeigt es deutlich, dass der Upgrade-Pfad neu aufgebaut werden muss, um eine saubere, durchgängige Installationskette zu erhalten.
Wie wir es vereinfacht haben
Einige Installationsprogramme verfügen über eine integrierte Logik für die Handhabung von Upgrades, viele jedoch nicht.
In solchen Fällen müssen die Paketierer den Prozess manuell verwalten, was oft zu Inkonsistenzen führt, da jeder Anbieter eine andere Installationslogik verwendet.
Um diesen Prozess vorhersehbar zu machen, haben wir das PSAppDeployToolkit v4 um eine spezielle Apptimized-Funktion erweitert, die Upgrades in jedem Szenario handhabt, unabhängig davon, wie das ursprüngliche Installationsprogramm erstellt wurde.
Unsere Funktion ermöglicht mehrere Bereinigungsstrategien:
- MSI-Installationsprogramme nach ProductCode deinstallieren,
- Deinstallation von MSI-Installationsprogrammen nach DisplayName über Software (mit den Optionen Match und RegExp, um alle möglichen früheren Versionen unter demselben DisplayName zu entfernen),
- Legacy-Setups zu deinstallieren, indem der Pfad zu einer bestimmten uninstall.exe mit benutzerdefinierten Parametern angegeben wird,
- Deinstallation von Legacy-Setups nach DisplayName über “Programme hinzufügen und entfernen” (wiederum mit Unterstützung von Match und RegExp ).
Diese Flexibilität stellt sicher, dass jede frühere Version erkannt und automatisch entfernt werden kann, bevor die neue Version installiert wird, so dass das System sauber und stabil bleibt.
Unsere angepasste Variante von PSAppDeployToolkit macht die Handhabung von Upgrades einfach und zuverlässig für beide Apptimized Factory und Apptimized Workspace.
Factory-Ingenieure verwenden es für die Verwaltung komplexer Kundenumgebungen, während Workspace-Benutzer direkt im Paketierungstool auf dieselbe PSADT-Version zugreifen können, so dass sie Anwendungen einpacken und die Upgrade-Logik problemlos selbst konfigurieren können.
Upgrades einfach machen
Upgrades sind einer der am wenigsten sichtbaren, aber wirkungsvollsten Teile der Anwendungspaketierung.
Wenn sie richtig gehandhabt werden, bleiben Umgebungen vorhersehbar und wartbar, unabhängig davon, wie viele Versionen im Laufe der Zeit veröffentlicht werden.
Mit unseren erweiterten PSADT-Funktionen wird das Upgrade-Management einfach, konsistent und vollständig unter Kontrolle, wodurch eine versteckte Herausforderung in einen reibungslosen, automatisierten Prozess verwandelt wird.
