Einzelnen Beitrag anzeigen

Guido Eisenbeis

Registriert seit: 9. Apr 2006
389 Beiträge
 
Delphi 10.3 Rio
 
#39

AW: Shutdown-Folder, oder: Wie starte ich ein Prog beim Win-Runterfahren?

  Alt 21. Sep 2011, 05:32
Hallo Leute,

diesmal sind echt wieder einige interessante Antworten dabei, da "musste" ich mir sogar erst mal einen Kaffee holen. Vielen Dank an alle!

Ich versuche alle zu beantworten und dabei "ähnliche Elemente zu gruppieren". (kleines Wortspiel *grins* )


Wenn ich das hier richtig sehe, geht es ja nicht mehr um eine konkrete lösung der Lautstärkeanpassung, sondern vor allem darum wie man diese korrekt in einem Setup verpacken und installieren kann.
...
ich hoffe ich habe das jetzt so richtig wiedergegeben - zumindest hieß es in Post #1
Zitat:
Das Programm soll möglichst mit einer Installations-Routine installiert werden können, z. B. Doppelklick -> ein paarmal "Weiter" -> und "Fertig".
Das hast du soweit richtig wiedergegeben. Ich hab extra den weitgefassten Begriff "Install-Routine" gewählt, weil mir sogar eine Batch-Datei genügen würde. ... Das ist schonmal 'ne gute Überleitung zum nächsten Posting ->


... Vor ein paar Jahren hatte ich mit 'ne kleine "App" geschrieben die
recht zuverlässig funktioniert, auch wenn es nur per Autostart bzw. Aufgabenplanung gestartet werden musss.

Gute Sache soweit: Es es ist "schon fertig" und "funktioniert" bei einem Test (Querschläger unbekannt). Diese APP braucht also nur in einen Programme-Ordner und eine Verknüpfung in den Autostart-Ordner kopiert zu werden. -> Hier könnte eine simple Batch als Install-Routine dienen.

Weniger gut: Closed Source. Somit kann ich also zum einen nicht einschätzen, ob es die bekannten "Querschläger" erzeugt: Runterfahren läuft weiter, andere Progrs und Dienste werden beendet, ... Zum anderen kann ich das erweiterte Ziel nicht umsetzen, was nämlich ein Shutdown-Ordner wäre, mit dem auch andere Aufräum- und Sicherungsarbeiten durchgeführt werden können.

Ich will aber nicht undankbar sein: Hättest du die App am Anfang meines Threads gepostet, hätte ich vielleicht sogar einfach nur das genommen, um den weiteren Aufwand zu vermeiden.

Kannst Du auch was zu der Lösung sagen, evtl. mit relevanten Sourceauszügen?

Dem kann ich mich nur anschließen. Um die Lösung wirklich auszuschöpfen, müsste ich "reinschauen" können. (siehe oben "Closed Source") Ich würde mich freuen, wenn du uns den Code zeigen würdest.


... "Asynchronous" ist auf 1 gesetzt. Bedeuted das, dass wie beim "WM_QUERYENDSESSION"-Code das Runterfahren NICHT angehalten wird und alle anderen Programme und Dienste beendet werden?
...

Du müsstest das wohl auf 0 setzen, klar
Hätte ich auch so gedacht, bin da jetzt nicht aber nicht mehr so sicher, wegen folgender Infos:


Was wäre da denn der Vorteil gegenüber der "WM_QUERYENDSESSION"-Lösung
Dass Windows bzw der SCM wirklich auf das Beenden des Dienstes wartet. Siehe hier.

D.h. Du kannst in Ruhe alles machen, was gemacht werden soll, ohne fürchten zu müssen, dass Windows mittlerweile den SCM killt.

Das hört sich genau so an, wie ich es haben will. Die verlinkte Seite bestätigt das auch ungefähr so:

Zitat:
... fordern Sie beim SCM eine Benachrichtigung vor dem Herunterfahren an. Der SCM wartet (möglicherweise auf unbestimmte Zeit) darauf, dass alle Dienste, die so benachrichtigt wurden, heruntergefahren werden, bevor der traditionelle Prozess zum Herunterfahren von Diensten beginnt.

Das entspricht meiner Vorstellung von einer sauberen Möglichkeit, Programme vorm Runterfahren auszuführen.

Das war die gute Nachricht. Jetzt die weniger guten: Den Aufwand kann ich nicht einschätzen, um einen solchen Dienst zu entwickeln, der dann auch noch per Named Pipe mit dem SCM kommuniziert. Der SCM klopft AFAIK alle paar Sekunden bei dem Dienst an, ob jetzt runtergefahren werden kann. (So ähnlich wie Kinder auf der Rückbank: "Sind wir jetzt da? ... Sind wir jetzt da? ). Dann bin ich mir auch unsicher, ob es bei XP überhaupt funktioniert:

Zitat:
Windows Vista hat eine neue Benachrichtigung vor dem Herunterfahren eingeführt, die Dienste erhalten können.

Kann da jemand was drüber sagen?


Ansonsten schonmal ein Resümee: Es wurde zu einigen Problem-Punkten schon Lösungen vorgeschlagen, mit denen ich soweit zufrieden bin.

Somit bleibt noch ein Problem übrig: Gesucht ist eine saubere Möglichkeit, ein Programm VOR dem Abmelden / Runterfahren auszuführen.


Ein guter Kandidat scheint der Vorschlag "Winlogon-DLL" als Dienst zu sein. Ich würde mich über weitere Infos freuen, insbesondere wenn jemand eigene Erfahrungen hat.
Einen mundgerecht aufbereiteten Source-Code würd ich aber auch nehmen.


Guido.


Edit: Kleine Ergänzung eingefügt.

Geändert von Guido Eisenbeis (21. Sep 2011 um 05:46 Uhr)
  Mit Zitat antworten Zitat