Das Problem des erneuten Downloads von Dateien, die ursprünglich während der Sommerzeit heruntergeladen wurden und dann nach der Zeitumstellung auf Normalzeit erneut, hat mich einfach nicht in Ruhe gelassen. Es gab und gibt zwar Workarounds (Ticket c't Offline Update, Wiki-Eintrag c't Offline Update), jedoch sind diese nur bedingt befriedigend.
Der Querschläger ist hierbei das wget-Tool, das anstatt der UTC-Zeit immer den lokalen Zeitstempel zum Vergleich verwendet, der sich durch die Zeitumstellung verändert (auch bei Verwendung einer anderen Zeitzone).
Nach diversen Recherchen und vielen Versuchen habe ich nun eine Lösung des Problems gefunden. wget berücksichtigt die Umgebungsvariable TZ, in der die aktuelle Zeitverschiebung im Verhältnis zur UTC abgelegt werden kann. Diese ermittelt man am besten anhand der Registry. Das funktioniert mit dem folgenden VBScript CurrentTimeZone.vbs (kommt ins Verzeichnis /cmd):
HINWEIS: Die aktuelle Version 0.2.0 des Skripts gibt es in diesem Beitrag.
- Code: Select all
' *****************************************************
' * CurrentTimeZone.vbs (by Gerby) *
' * Determines the current time zone information *
' * and returns an UTC string. *
' *****************************************************
Set WshShell = WScript.CreateObject("WScript.Shell")
Registry_TimeBias = "HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\TimeZoneInformation\ActiveTimeBias"
' Registry_TimeBias is indicated in minutes, therefore the division by 60 (conversion to hours)
TZ_Offset = WshShell.RegRead(Registry_TimeBias)/60
TZ_String = "UTC" & TZ_Offset
WScript.Echo TZ_String
Leider kann das Skript die Umgebungsvariable TZ nicht für die aufrufende Umgebung setzen, so dass ein kleiner Umweg genommen werden muss. Das Skript gibt den benötigten String für die Umgebungsvariable aus. Diese Ausgabe muss durch DownloadUpdates.cmd in die Umgebungsvariable TZ geleitet werden. Der Aufruf des VB-Skripts und die Erstellung der Umgebungsvariable erfolgt in einer Zeile:
- Code: Select all
for /f "tokens=*" %%u in ('cscript.exe //NoLogo CurrentTimeZone.vbs') do set TZ=%%u
Das war's auch schon.
Kleiner Wermutstropfen: Es ist durchaus möglich, dass beim ersten Download nach dem Anwenden dieser Lösung einmalig diverse (oder auch alle) Dateien nochmals heruntergeladen werden, da wget sich nun an der UTC orientiert. Aber danach sollten keine Mehrfachdownloads mehr auftreten.
Schöne Grüße
Gerby