Entwickler-Ecke

Windows API - Shutdown -a aus einem Programm heraus ausführen


thommy f - Mi 12.08.09 14:10
Titel: Shutdown -a aus einem Programm heraus ausführen
So, mein Problem von gestern hatten wir recht fix gelöst. An dieser Stelle nochmals DANK für die Hilfe.

Nun wäre es natürlich traumhaft, wenn man das Programm automatisch vor dem Herunterfahren ausführen könnte.

In diversen Foren habe ich gefunden, dass man Programme mit einem kleinen Skript vor dem Herunterfahren ausführen kann. Um sicherzustellen, dass das Programm vollständig ausgeführt und nicht von der Shutdown-Routine unterbrochen oder beendet wird, würde ich gerne den in W2k und WinXP vorhandenen Befehl


Quelltext
1:
shutdown -a                    


ausführen, um die Shutdown-Routine zu unterbrechen.

Das Programm würde diese Routine dann nachdem es fertig ist neu ausführen.

Wie kriege ich diesen Befehl beim Programmstart ausgeführt?

Dürfte eigentlich nicht zu schwer sein, oder?

THX!


BenBE - Mi 12.08.09 14:30

Siehe InitiateSystemShutdown und AbortSystemShutdown. Vollständigen Source bzgl. Anfragen der rEchte gibt's hier im Forum.

Unter Vista die Möglichkeit der Shutdown Block reason nutzen.


thepaine91 - Mi 12.08.09 15:24

Shutdown -a unterbricht die Routine doch überhaupt nicht. Damit kann nur verhindert werden das sie gestartet wird. Und das auch nur wenn Zeit bleibt sie zu verhindern.


Xentar - Mi 12.08.09 15:31

shutdown -a funktioniert (soweit ich weiß) nur, wenn dieser Countdown läuft.
Wenn das System schon runter fährt, und z.B. schon die Programme beendet, funktioniert das glaube ich nicht.


thepaine91 - Mi 12.08.09 15:53

Xentar hör auf zu glauben ^^ ich habe darauf doch schon im vorherigen Post hingewiesen.
So um das noch zu hinterlegen.

EDIT:
Windows Hilfe hat folgendes geschrieben:

-a
Bricht das Herunterfahren ab. Ignoriert andere Parameter außer -l und Computername. Sie können -a nur während des Zeitlimits verwenden.


Also wie ich schon zuvor gepostet habe hat nichts mit der eigentlichen Shutdown routine zu tun.


Delete - Mi 12.08.09 22:48

Zu dem braucht man Administratorenrechte um shitdown.exe auszuführen.


Tilman - Mi 12.08.09 23:15

user profile iconLuckie hat folgendes geschrieben Zum zitierten Posting springen:
Zu dem braucht man Administratorenrechte um shitdown.exe auszuführen.


Absicht oder Freud? :lol:


Delete - Do 13.08.09 00:11

user profile iconTilman hat folgendes geschrieben Zum zitierten Posting springen:
user profile iconLuckie hat folgendes geschrieben Zum zitierten Posting springen:
Zu dem braucht man Administratorenrechte um shitdown.exe auszuführen.


Absicht oder Freud? :lol:

Wie meinen?


Tilman - Do 13.08.09 01:04

Naja ob SHIT absicht war, oder eine freudsche Fehlleistung...


Delete - Do 13.08.09 01:58

Oh, habe ich gar nicht gesehen. War aber ein Vertipper - ich schwörs.


thepaine91 - Do 13.08.09 09:17

InitiateSystemShutdown und CancelSystemShutdown(bei mir Abortsystemshutdown).
So auch (Abortsystemshutdown) Beenden wie (shutdown -a) nur den Countdown der z.B. mit InitiateSystemShutdown eingeleitet wurde.
Also auch dieser kann keine shutdown Routine unterbrechen.
Generell kann ich mir nicht vorstellen das es möglich ist ein Herunterfahrendes System noch zu stoppen.

Und mal so am Rande wie würde man "shitdown".exe eigentlich ins Deutsche übersetzen?


Timosch - Do 13.08.09 11:50

user profile iconLuckie hat folgendes geschrieben Zum zitierten Posting springen:
Zu dem braucht man Administratorenrechte um shitdown.exe auszuführen.

Danke, dass mal jemand hier darauf hinweist. Ich möchte mich hier mal selbst zitieren :-) (von hier [http://www.delphi-forum.de/viewtopic.php?t=80511], da gings zwar einfach nur ums Herunterfahren, aber das Credo bleibt das gleiche):
user profile iconTimosch hat folgendes geschrieben:
Man ruft keine externen Programme auf, um Dinge durchzuführen, für die es API-Befehle gibt.
Wenn ich den Benutzer nach etwas frage, starte ich ja auch nicht den Notepad, lasse ihn den Text eingeben und abspeichern und lese die Datei aus, sondern verwende TEdit, InputBox oder ReadLn.
Sonst ergeben sich folgende Probleme:
1. fördert das die Abhängigkeit von externen Dateien, die u.U. gar nicht existieren. Wenn ich in meine Eingabeaufforderung eingebe "shutdown -s -f" kommt "Der Befehl "shutdown" ist entweder falsch geschrieben oder konnte nicht gefunden werden." Warum wohl? Weil ich Windows 2000 verwende...
2. kostet es Zeit und Ressourcen, weil der Rechner einen neuen Prozess starten muss. Fällt zwar nicht sehr ins Gewicht, ist aber vollkommen grundlos.
3., wie Luckie schon sagte, zwingt es den Benutzer, als Admin zu arbeiten.
Das geht jetzt an alle, die mit diesem Vorschlag (und ähnlichen) in solchen Threads immer wieder ankommen: Lasst das! Bitte! So gewöhnt man Anfängern gleich verheerende Fehler an...

Man sieht an Punkt 3, das diese Threads immer gleich verlaufen. :mrgreen:


BenBE - Do 13.08.09 12:47

Ein Glück, dass ich das bzgl. der API gleich in der ERSTEN ANTWORT geschrieben hatte ...

user profile iconBenBE hat folgendes geschrieben Zum zitierten Posting springen:
Siehe InitiateSystemShutdown und AbortSystemShutdown. Vollständigen Source bzgl. Anfragen der rEchte gibt's hier im Forum.

Unter Vista die Möglichkeit der Shutdown Block reason nutzen.


Danke für's Ignorieren dieses Posts.


thommy f - Do 13.08.09 12:51

Meine Güte,

da ist Microsoft dann aber mal wieder tüchtig eingebildet, oder? Wenn man eine EXE-Datei beim Systemstart ausführen will, braucht man diese nur in ein Verzeichnis namens "Autostart" zu kopieren. Wenn es jedoch wesentlich Sinniger wäre, die gleiche EXE-Datei VOR dem Herunterfahren zu starten, zickt Windows wieder derart rum.

Ich glaub ich steig um auf LINUX!

aber DANKE TROTZDEM!


BenBE - Do 13.08.09 13:04

user profile iconthommy f hat folgendes geschrieben Zum zitierten Posting springen:
Meine Güte,

da ist Microsoft dann aber mal wieder tüchtig eingebildet, oder? Wenn man eine EXE-Datei beim Systemstart ausführen will, braucht man diese nur in ein Verzeichnis namens "Autostart" zu kopieren. Wenn es jedoch wesentlich Sinniger wäre, die gleiche EXE-Datei VOR dem Herunterfahren zu starten, zickt Windows wieder derart rum.

Bzgl. Vista habe ich die Lösung ja bereits geschrieben ... Danke für's Ignorieren; ich fühl mich geehrt!

user profile iconthommy f hat folgendes geschrieben Zum zitierten Posting springen:
Ich glaub ich steig um auf LINUX!

aber DANKE TROTZDEM!

Mach mal bitte einen Dieter Nuhr ... Auch wenn Linux in der Hinsicht etwas freundlicher ist, heißt das noch lang nicht, das dadurch alles besser wird ;-) Und verschon bitte die Linux-Gemeinde von dieser Einstellung.


thepaine91 - Do 13.08.09 13:07

BenBE aber zu deinem Beitrag hatte ich schon den nachteil geschildert.
thommy f dein Vorhaben ist möglich. Nur befürchte ich das es zu viel aufwand wäre.
Dein Konzept fehler ist einen bereits angefangenen shutdown zu stoppen. Du musst dich zwischen den Befehl zum shutdown und den shutdown setzen. Dann wäre es theoretisch möglich.

Davon abgesehen befürchte ich das es dein Horizont überschreitet wenn du schon so ahnungslos mit befehlen wie shutdown -a um dich wirfst ohne zu wissen was diese wirklich tun.

mfg nic


Timosch - Do 13.08.09 13:43

user profile iconBenBE hat folgendes geschrieben Zum zitierten Posting springen:
Ein Glück, dass ich das bzgl. der API gleich in der ERSTEN ANTWORT geschrieben hatte ...

user profile iconBenBE hat folgendes geschrieben Zum zitierten Posting springen:
Siehe InitiateSystemShutdown und AbortSystemShutdown. Vollständigen Source bzgl. Anfragen der rEchte gibt's hier im Forum.

Unter Vista die Möglichkeit der Shutdown Block reason nutzen.


Danke für's Ignorieren dieses Posts.

Mea culpa. Bitte vergib mir. ;-) Ich wollts nur nochmal betonen.


thommy f - Do 13.08.09 15:08

Hey, sorry, ich wollte hier weder jemanden bzw. einen Post ignorieren, noch wollte ich hier diverse Diskusionen auslösen. Bezüglich SystemShutdown und AbortSystemShutdown konnte ich weder im Forum noch bei Google was verwertbares finden. Anscheinend bin ich echt zu doof die Suchfunktion korrekt zu nutzen. Aber Danke nochmal. Werde mich nochmals intensiv mit diesen Routinen beschäftigen.

Ich hatte auch nicht vor die MICROSOFT-Verfechter in irgendeiner Weise anzugreifen. Mir fällt eben nur immer wieder auf, dass man unter WINDOWS häufig relativ aufwändige "Umwege" gehen muss um das gleiche Ergebnis zu erzielen, das man unter Linux mit einer kurzen Befehlszeile hin bekommt.

Nochmals Sorry, falls ich irgendwem auf die Nerven gefallen bin und VIELEN DANK für die Hilfe.


Dazu kurz noch erwähnt, dieses Forum ist eines der hilfreichsten, das ich bisher kenne. Ich habe zwar etwas Erfahrung mit Programmierung allgemein und auch mit Delphi, aber kein ausgesprochener Crack bin ich (noch) nicht. Und bisher konnten hier alle Probleme gelöst werden.


thepaine91 - Do 13.08.09 15:19

thommy msdn Hilfe aus Delphi oder msdn.com und die Routinen eingeben da steht alles was man wissen muss.
Und trotzdem sag ich dir nochmal das ist nicht was du suchst. ^^