Software mit eigenem Updatemechanismus

Hallo zusammen,

wir haben einige Anwendungen im Unternehmen, die über einen eigenen Updatemechanismus verfügen, der teilweise nicht unterbunden werden kann.

Bei diesen Programmen wird entweder eine Anwendung installiert oder „einfach“ ein Programmverzeichnis lokal kopiert, das sich beim Start eigenständig aktualisiert.

Es kommt alle paar Monate oder Jahre vor, dass wir die Installationsdateien aktualisieren, damit beim ersten Start nicht erst eine Vielzahl an Updates installiert werden müssen.

Früher (bei Setup.inf-Paketen) haben wir die Version 1.0 verteilt und bei einem Update lediglich die Installationsdateien ersetzt und die Build-Nummer um 1 erhöht.

Später sind wir dazu übergegangen, die korrekte Version in der Setup.inf zu pflegen, AskUninstallOld auf 0 zu setzen und vor der Installation zu prüfen, ob das Verzeichnis bereits vorhanden ist.
Für diese Vorgehensweise haben wir den folgenden Befehl aus den neo-Paketen übernommen, um die alte Version korrekt zu deregistrieren, damit keine Paketreste im Empirum-Inventory verbleiben:

CallHidden %System%\cmd.exe /C FOR /F "Tokens=*" %%I IN ('%System%\reg.exe QUERY "HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows\CurrentVersion\Uninstall" ^| %System%\find.exe /I "HKEY_LOCAL_MACHINE\Software\Microsoft\Windows\CurrentVersion\Uninstall\Matrix42 - %DeveloperName% %ProductName%"') DO CALL %System%\reg.exe DELETE "%%I" /F
CallHidden %System%\cmd.exe /C FOR /F "Tokens=*" %%I IN ('%System%\reg.exe QUERY "HKEY_LOCAL_MACHINE\SOFTWARE\$Matrix42Packages$\%DeveloperName%\%ProductName%" ^| %System%\find.exe /V /I "HKEY_LOCAL_MACHINE\Software\$Matrix42Packages$\%DeveloperName%\%ProductName%\%Version%"') DO CALL %System%\reg.exe DELETE "%%I" /F
CallHidden %System%\cmd.exe /C FOR /F "Tokens=*" %%I IN ('dir /B /AD /S "%CommonAppData%\$Matrix42Scripts$\%DeveloperName%\%ProductName%" ^| %System%\find.exe /V /I "%CommonAppData%\$Matrix42Scripts$\%DeveloperName%\%ProductName%\%Version%"') DO RD /S /Q "%%I"

Bei den neuen PSADT-Paketen bin ich unsicher, wie ich das genau abbilden soll. Ein Paket, das ich bereits umgestellt habe, läuft derzeit noch auf Version 1.0.

Dass die alte Version nicht aktiv deinstalliert wird, würde ich vermutlich über den Schalter UninstallOld in der neo42PackageConfig.json steuern.

Wie kann ich erreichen, dass das alte Paket korrekt sowohl für Empirum als auch für PSADT deregistriert wird?

Gruß
Meikel Hartmann

Hallo Meikel,

richtig der Parameter UNINSTALLOLD steuert das Deinstallationsverhalten bzgl. der Altversion(en):

1: Das alte Paket wird zuerst deinstalliert

0: Das alte Paket wird zuvor nicht deinstalliert

WICHTIG dabei ist immer, dass die Bedingungen zur Namenskonvention beider Pakete eingehalten werden, damit die automatische Pakteintragsbereinigung erfolgen kann. Folgende Parameter müssen für alle diese Pakete identisch sein:

  • AppVendor
  • AppName
  • PackageGUID
  • ProductGUID

Die Paketversion (AppVersion) ist das Unterscheidungsmerkmal und steuert die Aktionen.

Noch ein Hinweis/Tipp:

Solange keinerlei “Erkennung der Anwendung” in der Konfigurationsdatei hinterlegt ist (weder UninstallKey noch Softmigration ist befüllt), ist jeder Durchlauf “aus Sicht” des Installationsscripts eine Installation und die gesamte Ausführungslogik (wie bisher) kann dann in der Custom-Funktion “CustomInstallAndReinstallAndSoftMigrationEnd“ hinterlegt werden, da diese immer durchlaufen wird.

Grüße René.