Teams Classic Client Update
Der Microsoft Teams Client für Windows ist keine MSI-Datei zur Installation und orientiert sich auch nicht an dem Update-Zyklus von Office 365, sondern macht ein eigenes Ding. Auf dieser Seite versuche ich etwas hinter die Kulissen des Update zu blicken, wie sie Updates kontrollieren und vielleicht blocken können.
Diese Seite ist auch aufgrund der Seite Sonderzeichen in Userprofile entstanden.
Grundlagen
Eigentlich hat Microsoft auf dem "High Level" schon alles auf der Seite "Teams update process (https://learn.microsoft.com/en-us/microsoftteams/teams-client-update)" beschrieben, so dass ich mich hier kurz fassen will:
- Updates werden üblicherweise am 4. Montag des Monats
bereitgestellt.
Teams orientiert sich dabei nicht an den Office Updates. Natürlich wurden die Clients vorab "rigoros" getestet. Dass das manchmal nicht klappt, habe ich auf Sonderzeichen in Userprofile beschrieben. - Ausrollen in Wellen
An dem besagten 4. Montag bekommen natürlich nicht alle Benutzer gleichzeitig sondern auch hier erfolgt eine Streuung. Es kann also sein, dass einige Anwender schon neue Funktionen sehen, die andere Anwender noch nicht haben. - Automatischer UpdateCheck
Jeder Client prüft alle paar Stunden bei Microsoft auf eine neue Version. Der Benutzer kann das auch anstoßen aber das sollte nie notwendig sein. Microsoft kann steuern, welche Tenants und Client ein Update angezeigt wird. - Stiller Download und Installation
Wenn ein Update ansteht, wird es im Hintergrund heruntergeladen und installiert, wenn der Anwender einige Zeit nicht in Teams aktiv ist. - Benutzer muss angemeldet sein
Es gibt keinen "Update Service", der im Hintergrund eigenständig Updates ausführt. - StartupCheck
Wenn der Client neu startet, prüft er die aktuelle Version und je nach dem, wie alt die Version, startet der Client oder erzwingt erst ein Update
Soweit ich gesehen habe, nutzen alle Teams Anwender mehr oder minder den gleichen Client. Das bedeutet aber nicht, dass jeder Benutzer damit den gleichen Funktionsumfang hat. Zum einen gibt es Teams Richtlinien, über die ein Administrator die ein oder andere Funktion deaktivieren kann. Aber auch Microsoft kann sehr granular Funktionen ein und ausschalten. Ich merke das immer, wenn ich auf meinem Client mit mit unterschiedlichen Benutzern am gleichen Teams-Client anmelde, d.h. regulärer Benutzer, Benutzer mit "Preview", Benutzer im TAP Programm und einem Ring 1.5 Benutzer. Es immer der gleiche Teams Client mit komplett unterschiedlichem Verhalten. Stellen Sie sich das einfach so vor, dass viel mehr Code bereits enthalten ist, der anhängig von der Konfiguration aktiviert oder ausgetauscht wird.
Es gibt noch die Option Teams als "Machine Wide Installation" zu betreiben. Diese kommt eigentlich nur auf TerminalServer zum Einsatz. Hier wird Teams dann nach "C:\Program FIles" installiert aber muss vom Administrator regelmäßig aktualisiert werden. Siehe auch Teams Installation
Update in der GUI
Normalerweise sehen sie nie etwas von der Teams Version. Aber sie können sich die Version anzeigen lassen. Im Punkte-Menü können Sie über "Info" - Version die Version einblenden lassen und über "Nach Update suchen direkt eine Prüfung veranlassen.
Die manuelle Suche nach Updates macht eigentlich nur Sinn, wenn Sie als Administrator oder Supporter eine zu alte Version nachverfolgen wollen, denn Teams macht diesen Check selbst mehrfach am Tag. Sie können die Update-Prüfungen in Logdateien nachvollziehen. Der Anwender sieht entsprechende Meldungen direkt am oberen Rand:
- Anzeige der aktuellen Version und der
letzten Aktualisierung, wenn Sie diese über
"Info - Version" anfordern
- Anzeige, wenn Sie manuell eine Suche
angestoßen haben
- Ein Update wurde im Hintergrund
heruntergeladen und steht nach dem
Teams-Neustart bereit
Aber mich interessierte, was dahinter passiert und wie ich die Schritte im Fehlerfall analysieren und ggfls. korrigieren kann. Eine gute Quelle ist die Datei "%APPDATA%\Microsoft\Teams\logs.txt" mit einer Suche nach "Checking for update".
Auszug aus %APPDATA%\Microsoft\Teams\logs.txt
Hier sind gut die Intervalle mit ca. 4h Abstand zu sehen
Update-Konfiguration
Wenn Sie auf dem Teams Client mit ALT-CTRL-SHIFT-1 sich die Diagnoselogs exportieren lassen, dann können Sie in der Datei "Settings.json" sehr gut die konfigurierten Updatequellen sehen. Hier nur ein Auszug:
{ "settings": { "serviceEndpointInfoMap": { "https://teams.microsoft.com": { "update": { "pds": { "hostname": "https://teams.microsoft.com", "endpointPath": "/desktopclient/update", "params": "/{{appVersion}}/{{os}}/{{architecture}}" }, "feServer": { "hostname": "https://teams.microsoft.com", "endpointPath": "/desktopclient/update", "params": "/{{appVersion}}/{{os}}/{{architecture}}" } },
Je nach Umgebung (Siehe auch Clouds von Microsoft) gibt es unterschiedliche Quellen:
https://teams.microsoft.com https://teams.microsoft.com/desktopclient/update/{{appVersion}}/{{os}}/{{architecture}}" https://devspaces.skype.com https://devspaces.skype.com/desktopclient/settings/{{appVersion}}/{{os}}/{{architecture}} https://local.teams.office.com https://local.teams.office.com/desktopclient/settings/{{appVersion}}/{{os}}/{{architecture}} https://gov.teams.microsoft.us https://gov.teams.microsoft.us/desktopclient/update/{{appVersion}}/{{os}}/{{architecture}} https://dod.teams.microsoft.us https://dod.teams.microsoft.us/desktopclient/update/{{appVersion}}/{{os}}/{{architecture}} https://teams.microsoft.scloud https://teams.microsoft.scloud/desktopclient/update/{{appVersion}}/{{os}}/{{architecture}} https://teams.eaglex.ic.gov https://teams.eaglex.ic.gov/desktopclient/update/{{appVersion}}/{{os}}/{{architecture}}" https://teams.microsoftonline.cn https://teams.microsoftonline.cn/desktopclient/update{{appVersion}}/{{os}}/{{architecture}} https://teams.live.com https://teams.live.com/desktopclient/update/{{appVersion}}/{{os}}/{{architecture}}
Der klassische "Office365/Microsoft 365"-Tenant nutzt nur die erste Zeile.
Voraussetzungen
Damit Teams ein automatisches Updates als User macht, müssen drei Vorrausetzungen erfüllt sein:
- Installation in AppData
Wenn ein Admin den Clients in "Program Files" installiert hat, kann ein Benutzer kein Update machen. Sie müssen dann als Admin das Update per Softwareverteilung oder manuell durchführen, wie sie auch die initiale Installation durchgeführt haben - Teams "idle"
Teams macht das Update, wenn der Benutzer nichts mit Teams macht, d.h. Teams muss gestartet aber inaktiv sein. Wer also morgens Teams startet und nach der Arbeit wieder beendet, wird eine alte Version nutzen, bis Teams irgendwann beim Start meldet, dass es "zu alt" ist und erst ein Update erfolgen muss - Angemeldeter Benutzer
Wenn niemand an Teams angemeldet ist, z.B.: weil Sie Teams nur zur Teilnahme als Meeting Client in anderen Tenants nutzen aber selbst keine Teams-Lizenz haben, dann gibt es auch kein Update
Alle drei Voraussetzungen müssen erfüllt sein.
- Teams doesn't automatically update
https://learn.microsoft.com/en-us/microsoftteams/troubleshoot/teams-sign-in/teams-doesnt-automatically-update
Update-Check
Die ganz Kommunikation außer Audio/Video/Desktopsharing von Microsoft Teams erfolgt über HTTPS und kann daher über einen Inspection Proxy wie Fiddler einfach eingesehen werden. Der erste Aufruf ist die Suche nach Updates mit dem aktuell angemeldeten Benutzer. Dazu spricht der Client eine URL an, die seine eigene Versionsnummer enthält. Für die Windows-Version können Sie die aktuelle Version per PowerShell auch anonym ermitteln, wobei dann natürlich keine Berücksichtigung von TAP/BETA o.a. Clients möglich ist, die in der Regel einige Versionen "höher" sind.
PS C:\> Invoke-RestMethod https://teams.microsoft.com/desktopclient/update/1.3.00.24154/windows/x64 isUpdateAvailable : True nugetPackagePath : https://statics.teams.cdn.office.net/production-windows/1.5.00.33362/Teams-1.5.00.33362-full.nupkg releasesPath : https://statics.teams.cdn.office.net/production-windows/1.5.00.33362/RELEASES url : scenarioCode : 1 deltaPackagePath : https://statics.teams.cdn.office.net/production-windows/1.5.00.33362/deltas/1.3.00.24154/Teams-1.5.00.33362-delta.nupkg deltaReleasesPath : https://statics.teams.cdn.office.net/production-windows/1.5.00.33362/deltas/1.3.00.24154/RELEASES
Auf einem PC mit entsprechend angemeldeten Benutzer habe ich dann eine neuere Version bekommen. Mit einer anonymen Anfrage aber nicht. Microsoft wertet hier wohl durchaus noch eine Authentifizierung, Cookie o.ä. aus.
Wenn Sie genau mit der aktuellen oder einer höheren Versionsnummer zugreifen, dann
liefert der Service einen leere Antwort.
Ich hätte zumindest eine
JSON-Antwort mit einem "isUpdateAvailable: False" erwartet, um die
Gültigkeit der Antwort zu prüfen.
Der Abruf erfolgte zu einer Zeit, als
aufgrund des Fehlers in
Sonderzeichen
in Userprofile die aktuelles Version
1.5.00.34154/1.5.00.34874 zurückgezogen wurde und nur noch die
1.5.00.33362 angeboten wurde.
Ich interpretiere das aber auf den ersten Blick so, dass es anscheinend keine "Downgrade"-Funktion
gibt, mit der Microsoft ein Update zurückziehen kann. Nur
ein Aussetzen der Updates ist möglich
Die Pfade verweisen direkt auf die DownloadQuellen, die dann vom Client heruntergeladen werden. Auch diese URL kann per PowerShell direkt anonym angesprochen werden.
PS C:\> (Invoke-WebRequest https://statics.teams.cdn.office.net/production-windows/1.5.00.33362/Teams-1.5.00.33362-full.nupkg -Method head).headers Key Value --- ----- Accept-Ranges {bytes} ETag {"0x8DAD24DB7BEC8F6"} Server {Windows-Azure-Blob/1.0, Microsoft-HTTPAPI/2.0} X-Cache {TCP_HIT} x-ms-request-id {5b1f4bbf-401e-0007-1517-12128d000000} x-ms-version {2014-02-14} x-ms-lease-status {unlocked} x-ms-lease-state {available} x-ms-blob-type {BlockBlob} Access-Control-Expose-Headers {x-ms-request-id,Server,x-ms-version,Content-Type,Content-Encoding,Content-Language,Cach… Access-Control-Allow-Origin {*} X-Azure-Ref-OriginShield {Ref A: 9ECC1A3FA16349828B2373DCDE32B9C7 Ref B: AM3EDGE0910 Ref C: 2022-12-19T15:53:17Z} NEL {{"report_to":"NelMSTeams","max_age":604800,"failure_fraction":0.2,"success_fraction":0.… Report-To {{"group":"NelMSTeams","max_age":604800,"endpoints":[{"url":"https://teams.nel.measure.o… X-MSEdge-Ref {Ref A: D349D93CB1E44D3BAFE7538D50C8476E Ref B: FRA31EDGE0619 Ref C: 2022-12-21T22:01:39… Date {Wed, 21 Dec 2022 22:01:38 GMT} Content-Length {130050343} Content-Type {application/zip} Last-Modified {Tue, 29 Nov 2022 21:07:26 GMT} Content-Disposition {} PS C:\> (Invoke-WebRequest https://statics.teams.cdn.office.net/production-windows/1.5.00.33362/Teams-1.5.00.33362-full.nupkg -outfile Teams_windows_x64.1.5.00.33362
Die Daten liegen anscheinend in einem Azure Blob-Storage. Mit der Versionsnummer des aktuellen Clients können Sie auch direkt die Installer.EXE herunterladen. Die Datei kommt dann von einem Content Delivery Netzwerk.
https://statics.teams.cdn.office.net/production-windows-x64/Y.Y.Y.Y/Teams_windows_x64.exe https://statics.teams.cdn.office.net/production-windows-x64/1.5.00.34154/Teams_windows_x64.exe https://statics.teams.cdn.office.net/production-windows-x64/1.5.00.31168/Teams_windows_x64.exe https://statics.teams.cdn.office.net/production-windows-x64/1.5.00.35066/Teams_windows_x64.exe u.a.
Auch hier gilt wieder, dass die Versionsnummer komplett passen muss. Eine falsche Version liefert einen Fehler "BlobNotFoundThe specified blob does not exist"
Wenn Sie die Versionsnummer älterer Teams-Versionen kennen, können Sie diese auch herunterladen. Die Teams Release Notes sind eine Quelle einiger älterer Versionen.
- Versionsupdateverlauf für die Microsoft Teams-App
https://learn.microsoft.com/de-de/officeupdates/teams-app-versioning
Am 21. Dezember 2022 konnte ich z.B. immer noch die Version 1.5.00.9163 vom April 2022 herunterladen. Die Installation einer solch alten Version macht natürlich selten Sinn, denn meist triggert eine zu alte Version direkt ein Update oder das Format der Daten im Cache verhindert eine Anmeldung. Bei mir hat nach der Anmeldung der Teams Client umgehend ein Update gestartet, das sich dann aber totgelaufen hat. Ich habe nicht weiter geforscht und einfach das Teams-Verzeichnis gelöscht und frisch die aktuell gültige Version installiert. Fehler konnte ich im Squirrellog nicht finden. Vermutlich war es schon überschrieben worden.
Die NUPKG-Datei ist übrigens ein verkapptes ZIP-File. Wenn Sie die Erweiterung auf ".zip" ändern, können Sie reinschauen. Die Datei "Teams.nuspec" enthält z.B. die Version und auch die Verzeichnisstruktur kommt sehr bekannt vor.
Update durch Squirrel
Nicht nur der Teams Client nutzt viele Open Source Projekte sondern auch das Updates erfolgt anscheinend über Squirrel und das Verzeichnis "%localappdata%\Microsoft\Teams\packages" spielt eine wichtige Rolle:
Hier finden sich nicht nur das "Packages"-Verzeichnis, in dem die heruntergeladenen Pakete landen sondern daneben finden wir noch ein "current" und ein "previous"-Verzeichnis. Während des Updates können Sie auch noch ein "Stage" und manchmal ein "current-s1"-Verzeichnis sehen. Die Verknüpfungen zu Teams verweisen auf die Update.exe mit folgenden Parametern:
C:\\AppData\Local\Microsoft\Teams\Update.exe --processStart "Teams.exe"
Die kleine "Update.Exe" scheint so etwas wie der Bootloader zu sein, welcher dann erst Teams startet. In den 2 Megabyte finden sich Strings wie "GetPESquirrelAwareVersion", die ganz klar auf das Projekt "https://github.com/Squirrel/Squirrel.Windows/" verweisen. Etwas irritierend finde ich, dass im Dez 2022 immer noch die Version 2.0.1 vom Sep 2020 aktuell ist. Entweder ist das Projekt "ausentwickelt", wogegen aber die "Issues" sprechen oder es ist etwas vernachlässigt.
Auszug aus %localappdata%\microsoft\teams\SquirrelSetup.log Program: Starting Squirrel Updater: --createShortcut=Teams.exe -l=StartMenu Program: Starting Squirrel Updater: --update C:\\AppData\Roaming\Microsoft\Teams\DownloadedUpdate Program: Starting update, downloading from C:\\AppData\Roaming\Microsoft\Teams\DownloadedUpdate Program: About to update to: C:\\AppData\Local\Microsoft\Teams CheckForUpdateImpl: Generated new staging user ID: 69d9b5c0-25e5-5c96-b5d8-c75df5f5be7c CheckForUpdateImpl: Reading RELEASES file from C:\\AppData\Roaming\Microsoft\Teams\DownloadedUpdate ApplyReleasesImpl: Applying delta packages to current full package DeltaPackageBuilder: Applying MSDiff to lib\net45\api-ms-win-core-console-l1-1-0.dll.diff DeltaPackageBuilder: Applying MSDiff to lib\net45\api-ms-win-core-console-l1-2-0.dll.diff ... DeltaPackageBuilder: Updating metadata file: Teams.nuspec DeltaPackageBuilder: Repacking into full package: C:\\AppData\Local\Microsoft\Teams\packages\Teams-1.5.00.34154.nupkg ApplyReleasesImpl: Writing files to app directory: C:\\AppData\Local\Microsoft\Teams\stage ApplyReleasesImpl: Squirrel Enabled Apps: [C:\\AppData\Local\Microsoft\Teams\stage\Teams.exe] ApplyReleasesImpl: About to RemoveOldShorcuts for Teams.exe, rootAppDir C:\\AppData\Local\Microsoft\Teams ApplyReleasesImpl: Starting fixPinnedExecutables ApplyReleasesImpl: Processing shortcut 'C:\\AppData\Roaming\Microsoft\Internet Explorer\Quick Launch\User Pinned\TaskBar\Microsoft Teams (work or school).lnk' ApplyReleasesImpl: Old shortcut target: 'C:\\AppData\Local\Microsoft\Teams\Update.exe' ApplyReleasesImpl: New shortcut target: 'C:\\AppData\Local\Microsoft\Teams\Update.exe' ApplyReleasesImpl: Fixing up tray icons MeetingAddinInstaller: There is no version.txt. Falling back to getting version from folder name MeetingAddinInstaller: Version: 1.0.22321.3; addinPackageDirectory: 1.0.22321.3 MeetingAddinInstaller: .dead exists: False MeetingAddinInstaller: path to .dead: C:\\AppData\Local\Microsoft\TeamsMeetingAddin\1.0.22321.3\.dead MeetingAddinInstaller: before cleanup unused versions MeetingAddinInstaller: Addin directory exists. Copy was successful MeetingAddinInstaller: Version 1.0.22304.2 of the meeting add-in is now installed PresenceAddinInstaller: Installing Teams Presence addin for Outlook... PresenceAddinInstaller: check if UC TypeLib points to current\resources\assets\tlb\Uc.tlb PresenceAddinInstaller: UC Typelib WIN32 is registered under HKCU and file exists. Registration not needed! PresenceAddinInstaller: UC Typelib WIN64 is registered under HKCU and file exists. Registration not needed! PresenceAddinInstaller: IM Provider registry key already exists! ApplyReleasesImpl: cleanDeadVersions: for original version of 1.5.00.33362 and current version of 1.5.00.34154 ApplyReleasesImpl: cleanDeadVersions: exclude original folder stage ApplyReleasesImpl: cleanDeadVersions: exclude current folder stage Program: Starting Squirrel Updater: --quitAndInstall Teams.exe Program: Registry value Software\Policies\Microsoft\Office\16.0\Teams\PreventFirstLaunchAfterInstall does not exist RegistryService: RegKeyExists: HKEY_CURRENT_USER\Software\Microsoft\Office\Teams does not have DeadEndV3 Program: Registry value Software\Microsoft\Office\Teams\DeadEndV3 does not exist. Return default value: false Program: About to launch: 'C:\\AppData\Local\Microsoft\Teams\current\Teams.exe': --system-initiated
Das sind nur ein paar Zeilen, aber sie sehen recht gut, wie Squirrel hier arbeitet. Es prüft und aktualisiert LNK-Dateien, aktualisiert die Quelle anhand von DIFF-Dateien und beseitigt am Ende die älteren Versionen. In dem Logs erscheinen übrigens auch temporäre Verzeichnisse, die auf dem PC nach dem Update nicht mehr zu finden sind, wie z.B. ein "stage"-Verzeichnis, in dem Squirrel die neue Version zusammenbaur, ehe daraus dann die neue "current" wird.
Im Grund ist der Update-Prozess ziemlich gut ausgereift, da eine kleine Update.exe vor das Hauptprogramm geschaltet ist, die eine Versionsprüfung und Zwangsupdate machen kann. Ich habe nun aber noch nicht weiter untersucht, ob Squirrel auch defekte Installationen erkennen kann. Anscheinend prüft eine ":DEAD"-Datei, mit der man vielleicht eine defekte Installation deaktivieren kann. Übrigens können Sie "update.exe" auch direkt aufrufen. Sie sehen dann aber nur eine CMD-Shell mit den möglichen Optionen.
Squirrel schreibt verschiedene Log-Files aber manchmal ist sich der Prozess wohl nicht sicher, wo der beste Platz ist. Ich habe Squirrel-Logs an vielen Stellen gefunden:
%localappdata%\Microsoft\Teams\SquirrelSetup.log %localappdata%\Microsoft\Teams\current\SquirrelSetup.log %localappdata%\SquirrelTemp\Squirrel-Install.log %localappdata%\SquirrelTemp\SquirrelSetup.log %appdata%\Microsoft\Teams\SquirrelTelemetry.log %appdata%\Microsoft\Teams\installTime.txt
Besonders hilfreich fand ich dabei die Datei "%Appdata%\\Microsoft\Teams\SquirrelSetup.log", da ich mir das ein oder andere Mal die Konfiguration so zerstört habe, dass Teams gar nicht mehr starten konnte.
Auszug aus %Appdata%\\Microsoft\Teams\SquirrelSetup.log" 2022-12-22 14:22:40> Program: Starting Squirrel Updater: --processStart Teams.exe --process-start-args --profile=AAD 2022-12-22 14:22:40> RegistryService: TryGetRegKey: HKEY_CURRENT_USER\Software\Microsoft\Office\Teams\AcquireSource does not exist 2022-12-22 14:22:40> Unhandled exception: System.IO.FileNotFoundException: Die Datei "C:\\AppData\Local\Microsoft\Teams\packages\RELEASES" konnte nicht gefunden werden.
Insbesondere das Fehlen der "RELEASES"-Datei scheint update.exe nicht reparieren zu können, in der die Versionen beschrieben sind.
- Squirrel Windows: Update Process
https://github.com/Squirrel/Squirrel.Windows/blob/develop/docs/using/update-process.md
Update Prozess im Detail
Ich habe mir die Mühe gemacht, mit Procmon auf meine PC den Update-Prozess genauer zu analysieren und habe von Version 1.4.00.29473 (April 2022) auf 1.5.00.33362l aktualisiert. In dem Zuge habe ich kurz für dem Schreiben des aktuellen NUPKG-Pakets einen Zugriff auf ein Logfile gefunden, welches ich vorher nicht gesehen habe. Es protokolliert schön die Updates. Zur Lesbarkeit habe ich die Zeitstempel und ProcessID entfernt:
Auszug aus %APPDATA%\Microsoft\Teams\logs.txt -- info -- Checking for updates, User invoked - true, Download immediate - false, Forced version - null -- info -- Checking for update from /desktopclient/update/1.4.00.29473/windows/x64?ring=general -- info -- Downloading file from - https://teams.microsoft.com/desktopclient/update/ -- info -- Browser Window HTTP: Get Data HTTP with url:https://teams.microsoft.com/desktopclient/update/1.4.00.29473/windows/x64?ring=general -- info -- Browser Window HTTP: Push url in request queue:https://teams.microsoft.com/desktopclient/update/1.4.00.29473/windows/x64?ring=general -- info -- Browser Window HTTP: Download URL:https://teams.microsoft.com/desktopclient/update/1.4.00.29473/windows/x64?ring=general -- info -- UpdateResponse: {"isUpdateAvailable":true, "nugetPackagePath":"https://statics.teams.cdn.office.net/production-windows-x64/1.5.00.33362/Teams-1.5.00.33362-full.nupkg", "releasesPath":"https://statics.teams.cdn.office.net/production-windows-x64/1.5.00.33362/RELEASES", "url":null,"scenarioCode":2, "deltaPackagePath":"https://statics.teams.cdn.office.net/production-windows-x64/1.5.00.33362/deltas/1.4.00.29473/Teams-1.5.00.33362-delta.nupkg", "deltaReleasesPath":"https://statics.teams.cdn.office.net/production-windows-x64/1.5.00.33362/deltas/1.4.00.29473/RELEASES"} 546 -- info -- User invoked, download immediately -- info -- Downloading updates -- info -- Browser Window HTTP: Get Data HTTP with url:https://statics.teams.cdn.office.net/production-windows-x64/1.5.00.33362/Teams-1.5.00.33362-full.nupkg -- info -- Browser Window HTTP: Push url in request queue:https://statics.teams.cdn.office.net/production-windows-x64/1.5.00.33362/Teams-1.5.00.33362-full.nupkg -- info -- Browser Window HTTP: Download URL:https://statics.teams.cdn.office.net/production-windows-x64/1.5.00.33362/Teams-1.5.00.33362-full.nupkg -- info -- Downloading Browser Window HTTP:Teams-1.5.00.33362-full.nupkg -- info -- Browser Window HTTP: Resolving. Download completed for:Teams-1.5.00.33362-full.nupkg -- info -- Downloading file from - https:// -- info -- Browser Window HTTP: Get Data HTTP with url:https://statics.teams.cdn.office.net/production-windows-x64/1.5.00.33362/RELEASES -- info -- Browser Window HTTP: Push url in request queue:https://statics.teams.cdn.office.net/production-windows-x64/1.5.00.33362/RELEASES -- info -- Browser Window HTTP: Download URL:https://statics.teams.cdn.office.net/production-windows-x64/1.5.00.33362/RELEASES -- info -- Downloading Browser Window HTTP:RELEASES.txt -- info -- Browser Window HTTP: Resolving. Download completed for:RELEASES.txt -- info -- Executing squirrel command: --update -- info -- Update successful -- info -- The writeInstallOrUpdateTime passed -- info -- Updated completed. Ready to restart. -- info -- Stopping daemon App updates -- info -- Restarting the app -- info -- Updating done and restarting to updated app Teams
Das ist aber nur das "Teams Log, welches nicht verrät, was genau im Hintergrund beim Update passiert. Mit den Zeitstempeln konnte ich dann aber wieder in Procmon die nächsten Schritte analysieren.
- Suche in "C:\\AppData\Roaming\Microsoft\Teams\DownloadedUpdate\*"
Das Verzeichnis hatte er am Start angelegt und wieder gelöscht. - Der eigentliche Download des Update in
ein TMP-Verzeichnis, welches später nicht
mehr da ist.
- Wechsel auf "update.exe"
Nachdem Teams das update heruntergeladen und bereitgestellt hat, wird Teams beendet und C:\\AppData\Local\Microsoft\Teams\Update.exe gestartet, welches sich scheinbar erst mal selbst überwacht.
- Auspacken des NUPKG nach "stage"
- Squirrel startet
Nachdem Update.exe fertig ist, startet er Squirrel aus dem Stage-Verzeichnis
- Teams startet aus "Stage"
Squirrel.exe und update.exe sind immer noch aktiv, als eine neue teams.exe aus dem Stage-Verzeichnis startet
- Meeting
Addon
Zwischenzeitlich wird auch noch mal regevr32.exe gestartet, um das Meeting-Addin zu registrieren, welches ganz wo anders liegt
- Rename-Operation
Allerdings hatte ich mir erhofft dass ich auch die Aktivierung der neuen Version einfacher finde. Ich musste erst in einem anderen Trace ein Verzeichnis umbenennen, um den Event "SetRenameInformationFile" zu finden, mit dem ich dann meinen Teams Update Trace in Procmon filtern konnte:
In den Details steht dann auch die Quelle drin, woraus ich folgenden Prozess ableite
C:\\AppData\Local\Microsoft\Teams\current -> C:\\AppData\Local\Microsoft\Teams\current-s1 C:\\AppData\Local\Microsoft\Teams\stage -> C:\\AppData\Local\Microsoft\Teams\current C:\\AppData\Local\Microsoft\Teams\current-s1 -> C:\\AppData\Local\Microsoft\Teams\previous
Das ist ein klassischer Ringtausch, bei dem das Current-Verzeichnis erst einmal als "current-s1" gesichert wird, ehe dann "stage" zu "current" wird, ehe dann das bisherige "previous" durch das temporäre "current-1" ersetzt wird.
Automatisches Rollback
Auch bei Microsoft kann ja mal etwas schief gehen. Da stellt sich die Frage nach einem "Rollback". Durch einen Case bei einem Kunden habe ich erfahren, dass es wohl eine Rollback-Option gibt. Wie genau diese aber funktioniert, konnte ich nicht mittracken. Ich habe nur in den Logs Hinweise auf diese Funktion gesehen, z.B. in:
Auszug aus %APPDATA%\Microsoft\Teams\logs.txt -- event -- eventpdclevel: 3, distSrc: default, source: exe, type: notManagedDeployed, launchPath: %LOCALAPPDATA%, isUserInvoked: true, isLoggedOut: false, bucketId: 6, regularJitter: 3632479, hotfixJitter: 1816245, staggeredV2: true, policy: false, correlationId: 3ffd277b-a89e-4945-bc1b-acde73e50b34, endpointSource: pds, route: https://statics.teams.cdn.office.net/production-windows-x64/1.5.00.33362/RELEASES, scenarioCode: 2, newAppVersion: 1.5.00.33362, isDowngrade: false, updateStatusReason: undefined, distribution: FULL, sizeInBytes: 137461385, signedUpdates: ignore, count: null, status: success, scenario: 771ef2b5-7c62-4b42-b4b2-682b3371bdbc, scenarioName: desktop_update_download, name: desktop_update_download, step: stop, sequence: 1, delta: 7814, scenarioDelta: 7814, elapsed: 68607, stepDelta: 7814, Scenario.Mode: 1, AppInfo.Language: de-de, complianceEnvironmentType: 0, isDataCategorizationEnabled: true, userpdclevel: 0, processMemory: 20747028, freeMemory: 8060956672, clientType: desktop, AppInfo.ClientType: desktop, batterylevel: 0.89, pluggedin: true, Window.Focus: foreground, windowIsVisible: true, Window.Status: maximized, UserInfo.TimeZone: +01:00, vdiMode: 0, Scenario.Name: desktop_update_download, Scenario.Step: stop, Scenario.Status: success
Hier gibt es etwa in der Mitte die Kennzeichnung "isDowngrade: false". Auf der anderen Seite gibt es die Aussagen zu Squirrel:
... you must increment the version
number higher than your broken release (in this example, we
would need to release MyApp 1.0.2). Because some of your
users will be on the broken 1.0.1, releasing a new 1.0.1
would result in them staying on a broken version.
https://github.com/Squirrel/Squirrel.Windows/blob/develop/docs/using/staged-rollouts.md
Currently, there is no built-in support for rolling back to a previous version.
https://github.com/Squirrel/Squirrel.Windows/blob/develop/docs/using/update-process.md#rollback
Wenn Microsoft wirklich die Squirrel-Engine nutzt, dann haben Sie entweder etwas "drumrum" gebaut oder ihre Funktionserweiterungen noch nicht in das öffentliche Repository eingecheckt. Ich habe mir über 1k Forks nun nicht angeschaut, ob darunter auch der Microsoft Teams Zweig ist.
ManuelleRollback
Aber mit dem Wissen um die Updates und die Bereitstellung durch Microsoft können Sie manuell ein Rollback als Benutzer machen. Dazu gibt es drei Optionen:
Debug Menü
Wenn Sie bei einem laufenden Teams das kleine Icon in der Fußzeile neben der Uhr sieben mal mit der linken Maustaste klicken und dann die rechte Maustaste klicken, sehen Sie in den vielen neuen Einträgen eine Rollback-Option:
Ich könnte mir vorstellen, dass es auch für "update.exe" oder "teams.exe" einen Kommandozeilen-Parameter gibt.
Previous-Verzeichnis
Wenn Sie im "%localappdata%\Microsoft\Teams\" noch ein Verzeichnis "Previous" haben, dann können Sie einfache folgendes machen:
- Teams Client und Outlook Client beenden
Damit keine Dateien und auch das Meeting-Plugin frei sind - Verzeichnis "Current" z.B. nach "current.alt"
umbenennen
Sie können es auch gleich löschen aber das kann man später immer noch passieren. Teams löscht überzählige Verzeichnisse hier nicht. - Verzeichnis "Previous" zu Current kopieren oder umbenennen
- Teams starten
Es reicht übrigens nicht, einfach zu löschen. "Update.exe" hat scheinbar keinen Recovery-Mode, um bei einem fehlenden "Current"-Verzeichnis einfach das "Previous"-Verzeichnis live zu schalten.
Neuinstallation
Die zweite Version ist einfach eine komplette Teams Neuinstallation mit einer älteren Teams-Installer.exe, die Sie nach dem folgenden Verfahren noch erhalten können:
- Gewünschte Build-Nummer ermitteln
Entweder Sie kennen einen Client mit der gewünschten Version und lassen sich über die "Info - Version" die Nummer anzeigen oder schauen in die Datei "%localappdata%\Microsoft\Teams\packages\RELEASES." oder in die Release Notes auf https://learn.microsoft.com/de-de/officeupdates/teams-app-versioning - Download der Installationsquelle
Über die schon bekannte URL https://statics.teams.cdn.office.net/production-windows-x64/Y.Y.Y.Y/Teams_windows_x64.exe können Sie dann die Vollinstallation herunterladen. Ersetzen Sie dabei Y.Y.Y.Y durch die gewünschte und verfügbare Version. Wobei scheinbar nicht alle Versionen immer zum Download stehen. - Alte Teams-Installation löschen
Bei einer Installation über eine bestehende neuere Version wird kein Downgrade gemacht. Daher löschen wir einfach die Teams-Programmdateien auf "%localappdata%\Microsoft\Teams\". Eventuell müssen Sie Outlook beenden, wenn das Meeting-Plugin noch installiert ist oder sie überspringen den Fehler. - Teams Setup starten
Nun können sie die heruntergeladene "Teams_windows_x64.exe" als Benutzer starten.
Sollte nach dem Update Teams starten aber die Anmeldung verweigern, dann könnte es an dem Teams Cache liegen, der eventuell zu aktuell ist. Der einfaches Weg ist dann die angebotene Funktion zur "Abmeldung" zu nutzen. Das löscht Daten zum Profil und erlaubt ihnen eine saubere Neuanmeldung.
Durch meine Experimente habe ich mir das ein oder andere Mal den Teams Client derart zerschossen, dass er gar nicht mehr starten wollte. Dann hat die Neuinstallation immer wieder geholfen.
Weitere Links
- Teams Installation
- Fiddler
- Sonderzeichen in Userprofile
- Teams Client Update Manuell
- Teams Client Logs
- Classic Teams update process
https://learn.microsoft.com/en-us/microsoftteams/teams-client-update - Overview of Teams Desktop Client Auto Update Process
https://techcommunity.microsoft.com/t5/microsoft-teams-community-blog/overview-of-teams-desktop-client-auto-update-process/ba-p/2922657 - Teams doesn't automatically update
https://learn.microsoft.com/en-us/microsoftteams/troubleshoot/teams-sign-in/teams-doesnt-automatically-update