Page 1 of 1

FinalizationHook

PostPosted: 05.03.2013, 10:11
by aker
Die Idee des Initialization und FinalizationHooks finde ich super, da jeder dem Downloadlauf eigene Befehle damit hinzufügen kann, ohne das Skript selbst zu verändern.
Beim durchsehen der DownloadUpdates.cmd istnmir jedoch aufgefallen, dass letzterer pro Durchlauf mehr als einmal aufgerufen wird.
Dies geschieht dadurch, dass :DownloadCore mehrfach aufgerufen wird (Z. 828ff). Sobald dieser abgearbeitet ist springt er zu :EoF (erst zu :EndDownload und dann zu :EoF). Unter :EoF wird auch (falls vorhanden) diese cmd aufgerufen. Nach Beendigung des kompletten Durchlaufs (dotnet, win glb, %1 glb, %1 %2 ...) springt das gesamte Programm dann auch wiederunm über :RemindDate zu :EoF und führt den FinalizationHook erneut aus.

Wenn ich den Sinn dieses Skripts richtig verstanden habe, ist jedoch nur die letzttgenannte Verwendung erwünscht.
Darum mein Vorschlag: die Sprungmarke von :EndDownload verändern (nicht mehr :EoF, sondern meinetwegen :EoFd), damit dieses Skript nur ganz am Ende des Downloads ausgeführ wird.

Viele Grüße

Re: FinalizationHook

PostPosted: 07.03.2013, 10:18
by WSUSUpdateAdmin
Moin aker!

Die "Hooks" werden pro Aufruf von "DownloadUpdates.cmd" tatsächlich nur einmal ausgeführt; dieser Effekt hat also nichts mit den internen Subroutinen zu tun, sondern ist durch die Tatsache bedingt, dass "DownloadUpdates.cmd" ggf. vom "UpdateGenerator" mehrfach aufgerufen wird, nämlich einmal pro gewählte Plattform.

Das macht eine Änderung dieses Verhaltens aufwändig, und ich finde es auch vertretbar.

Gruß
Torsten

Re: FinalizationHook

PostPosted: 07.03.2013, 13:25
by -Iwan-
Wie wäre es mit einem Once-per-day-Check?
Sowas existiert ja schon für z.Bsp. C++ (Stichwort: same day rule).
Vielleich könnte man sowas in abgeändert Form auch hier für nutzen.