130834
Goto Top

Herunterfahren erkennen (Batch)

Hallo Leute

Ich war gerade am experimentieren mit 40'000 Dateien und mehr, und da dachte ich mir;
Was passiert wenn Windows oder der Benutzer plötzlich auf die Idee kommt den Computer herunterzufahren?

Ja. Dann passiert eine Menge Drama auf einmal, denn normalerweise werden Batch-Files einfach umgebracht.

Nach etwas Google habe ich herausgefunden, das Windows beim Herunterfahren ein Signal an die laufenden Anwendungen sendet.
War ja klar. Irgendwie mussten die es ja auch herausbekommen.
Das Event heißt dann "WM_QueryEndSession".

Jetzt würde mich interessieren ob ich mit meiner Batch oder ein Paar Bordmitteln
herausfinden kann ob Windows gerade ein "herunterfahren" gestartet hat.

Dann könnte ich den aktuellen Task der Batch abbrechen,
oder zumindest eine Variable speichern um beim wieder hochfahren weiterzuarbeiten.

Und wenn wir gerade dabei sind;
Wie bringe ich meine Batch am besten dazu auf das Signal zu hören, während sie die Dateien verarbeitet?

Freue mich auf Antworten

lg clragon

Content-Key: 326486

Url: https://administrator.de/contentid/326486

Printed on: April 20, 2024 at 03:04 o'clock

Member: agowa338
agowa338 Jan 15, 2017 at 18:00:56 (UTC)
Goto Top
Batch kann das nicht.
In einer Programmiersprache (oder PowerShell) könntest du das Event abfangen und darauf reagieren.
Ein sehr simples beispiel: https://stackoverflow.com/questions/10174075/powershell-window-preventin ...
Mitglied: 131381
131381 Jan 17, 2017 updated at 10:57:12 (UTC)
Goto Top
Oder per PS das Eventlog überwachen
$query = New-Object System.Diagnostics.Eventing.Reader.EventLogQuery("System",[System.Diagnostics.Eventing.Reader.PathType]::LogName,"*[System[(EventID=109) and (Provider[@Name='Microsoft-Windows-Kernel-Power'])]]")  
$watcher = New-Object System.Diagnostics.Eventing.Reader.EventLogWatcher($query, $null, $false)
Register-ObjectEvent -InputObject $watcher -SourceIdentifier "NewEventLogWatcher" -EventName 'EventRecordWritten' -Action {write-host "Shutdown is initiated."}  
$watcher.Enabled = $true
while($true){
    sleep .5
}
Wird langsam Zeit das du dir mal eine vernünftige Programmiersprache aneignest face-wink. Man kann sich auch mit einer Schrotflinte von hinten durchs Auge schießen.
Das ist ja nicht mehr mit anzusehen was verkrüppelte Lösungen du da mit Bat2Exe etc. bastelst ...
Lernen müssen wir unser Leben lang, also fang an du wirst Batch mit seinen diversen Unzulänglichkeiten schnell nicht mehr vermissen.

JustMy2Cent
Gruß mik
Mitglied: 130834
130834 Jan 18, 2017 at 16:19:47 (UTC)
Goto Top
Die Lösungen sind nicht verkrüppelt. Sie sind.... eben anders!
Ausserdem .... ergh...
Ausserdem! Ich benutze Bat2Exe nur um meine Tools zu bündeln, 2 dateien kann ich mir nicht leisten.
Ja ist ja gut.
Sobald ich meine beiden letzten grossen 2 Projekte fertig habe, starte ich das nächste in C++.
Aber die frage ist, was genau macht der code da oben? xD
Und wenn wir gerade dabei sind;
Wie bringe ich meine Batch am besten dazu auf das Signal zu hören, während sie die Dateien verarbeitet?

Das wär vielleicht noch wichtig....
Es bringt mir nix wenn ich den shutdown erkenne ohne die Erkennung benutzen zu können .
Mitglied: 131381
131381 Jan 18, 2017 updated at 16:33:52 (UTC)
Goto Top
Aber die frage ist, was genau macht der code da oben? xD
Es überwacht das Eventlog auf den Shutdown-Event. Hier im Beispiel wird nur die Meldung "Shutdown is initiated."
........-Action {write-host "Shutdown is initiated."}
auf der Konsole ausgegeben wenn ein Shutdown eingeleitet wurde, das kannst du ersetzen durch was immer du auch willst

Es bringt mir nix wenn ich den shutdown erkenne ohne die Erkennung benutzen zu können .
Code lesen, dann siehst du wo du handeln musst face-smile

Ausserdem! Ich benutze Bat2Exe nur um meine Tools zu bündeln
So das jeder Virenscanner schiss bekommt und deine Skripte gleich in die Tonne befördert face-big-smile. Diese Tools haben den miesesten Ruf ever, Finger weg.
Mitglied: 130834
130834 Jan 18, 2017 updated at 17:08:51 (UTC)
Goto Top
So das jeder Virenscanner schiss bekommt und deine Skripte gleich in die Tonne befördert . Diese Tools haben den miesesten Ruf ever, Finger weg.

Aber was soll man dann benutzen? Um den Code selber zu schreiben bin ich noch zu doof.

Es überwacht das Eventlog auf den Shutdown-Event. Hier im Beispiel wird nur die Meldung "Shutdown is initiated."
-Action {write-host "Shutdown is initiated."}

Ach ja... Das hab ich natürlich mitbekommen....
nur wie verbinde ich das mit einer batch die gerade in einer FOR Schleife läuft?
...

Gar nicht.
Ich werd die batch einfach umbringen lassen und auf mein Rettungssystem vertrauen,
Und das tool hier benutzen um ihr beim nächsten Start zu sagen das sie weitermachen soll.

Oder?
Mitglied: 131381
131381 Jan 18, 2017 updated at 17:13:35 (UTC)
Goto Top
Zitat von @130834:
Aber was soll man dann benutzen? Um den Code selber zu schreiben bin ich noch zu doof.
Wenn zusammenpacken dann z.B. mit WinRAR oder 7Zip eine selbst extrahierende EXE erstellen. Dann hast du auch nicht das Problem das Fragmente nach deinem Skript übrig bleiben denn die löschen das automatisch nach dem Ausführen (lässt sich konfigurieren).

Allemal besser C#/AutoIt etc. lernen und gleich eine richtige EXE ohne Abhängigkeiten kompilieren. Das .NET bietet alles was du brauchst.

Ein Meister ist noch nie aus dem Himmel gefallen, jeder fängt mal an, nur muss man halt mal anfangen face-smile sonst wird das ja nie was.

nur wie verbinde ich das mit einer batch die gerade in einer FOR Schleife läuft?
Zum Beispiel eine Statusdatei schreiben und auf Existenz in der Batch prüfen, ... arghhh was für ein Bullshit Batch ... kein MultiThreading nix ... hör mir damit auf da stellen sich einem die Haare.
Mitglied: 130834
130834 Jan 18, 2017 at 17:19:00 (UTC)
Goto Top
"Multithreading"
Ein so süsses Wort von dem ich bisher nur träumen durfte.
Es ist schlicht weg die Lösung für all meine Probleme.
Schwebt nur Zentimeter vor meiner Nase aber ich bin mit sowas wie DOS ( päh ) beschränkt
Mitglied: 131381
131381 Jan 18, 2017 updated at 17:28:16 (UTC)
Goto Top
Schwebt nur Zentimeter vor meiner Nase aber ich bin mit sowas wie DOS ( päh ) beschränkt
Never say no, it's never too late. face-smile
mit sowas wie DOS ( päh ) beschränkt
d.h. im Kerker des Grauens der 80er eingesperrt face-smile
Mitglied: 130834
130834 Jan 18, 2017 at 17:35:38 (UTC)
Goto Top
Was hältst du von der Entscheidung C++ zu lernen?
Ich find die Sprache ganz nett, C# ist zwar eine gute Idee
aber etwas umständlich geraten, meiner Meinung nach.
Java ist nur schlechter als C# ( ich sage nur Garbage Collector ) dafür läuft es überall...
C++ läuft auch ganz gut auf Android, die möglichkeiten damit kann ich aber nicht abschätzen.
Ich möchte eine gehörige Protion Datei managment haben,
Bei C# hat ein Kollege welche das lernt sowas wie "Dateimanagement" nie gefunden.
Vielleicht ist auch einfach nur der Fokus anders.

Kann ich deinen Rat haben?
Mitglied: 131381
131381 Jan 18, 2017 updated at 17:49:06 (UTC)
Goto Top
Zitat von @130834:
Was hältst du von der Entscheidung C++ zu lernen?
Auf jeden Fall wenn du eine gehörige Portion Zeit hast dann absolut ja. Aber ich kenne deine Lernfähigkeit ja nicht. Wenn du dich so zwingen musst eine Sprache zu lernen wirst du aber mit C/C++ für den Einstieg nicht glücklich.
Ich find die Sprache ganz nett, C# ist zwar eine gute Idee
aber etwas umständlich geraten, meiner Meinung nach.
Die Verbreitung sagt was anderes, ist Geschmackssache, ich finds i.O.
C++ läuft auch ganz gut auf Android, die möglichkeiten damit kann ich aber nicht abschätzen.
Alles ist möglich nur braucht es mit C++ halt etliche Zeit bis du Lernerfolge erzielst, und du musst eine gehörige Portion Frustrationsbereitschaft mitbringen.
Ich möchte eine gehörige Protion Datei managment haben,
Bei C# hat ein Kollege welche das lernt sowas wie "Dateimanagement" nie gefunden.
c# beruht auf dem .NET Framework und dort hast du alle Möglichkeiten die auch Powershell bietet, also eine ganze Menge!
Vielleicht ist auch einfach nur der Fokus anders.
Definitiv ja.

Wichtig ist das du die gängigen Strukturen kennen lernst. Dann steigst du schnell auf andere Sprachen um, ist ja dann nur wie Vokabeln lernen.
Mitglied: 130834
130834 Jan 18, 2017 updated at 21:17:27 (UTC)
Goto Top
Wenn du dich so zwingen musst

Nun ja ganz offensichtlich bietet mir Batch nicht genug Möglichkeiten.

zwignen will ich mich dazu nicht, ist nur ein Hobby. bis jetzt

Also doch C#.
Naja. It works what works. Ne eigen Programmiersprache will ich noch nicht erfinden hahaha.
Member: rubberman
rubberman Jan 19, 2017 at 11:09:55 (UTC)
Goto Top
Das wird zwar ganz schön off-topic, aber naja ...

C vs. C++
Die beiden haben zwar eine ähnlich Syntax, bedienen aber andere Programmierparadigmen, sodass sie unterschiedlicher nicht sein könnten.
C ist relativ schnell gelernt. Die Standardfunktionen sind überschaubar. Die Speicherverwaltung liegt aber voll in deinen Händen. Das ist, was C letztlich schwer, umstädlich und fehleranfällig macht. Die Programmierschnittstelle für POSIX (*nixoide Betriebssysteme) und die Windows API sind im C-Stil aufgebaut, haben aber ansonsten nichts mit C zu tun. Das heißt an dieser Stelle hört die plattformunabhängigkeit von C auf.
Mit C++ hast du mit Speicherverwaltung weniger Probleme. Es gibt ausreichend Containerklassen wo du dir darüber keine Gedanken machen musst. C geht aus Kompatibilitätsgründen fast vollständig in C++ auf. Das heißt C lernst du mehr oder weniger mit, wenn du C++ lernst. Die APIs von *nix und Windows lassen sich auch aus C++ bedienen. C++ ist aber viel komplexer als C. Insbesondere wenn du bisher nur mit Batch zu tun hattest, erfordert eine objektorientierte Sprache erst mal ein komplettes Umdenken.
Häufiges Missverständnis: Eine Reihe von Computerspielen sind mit C++ geschrieben, sodass viele glauben grafische Oberflächen würden von C++ unterstützt werden. Das ist nicht der Fall. Grafische Benutzeroberflächen gehören weder zum C, noch zum C++ Standard. Entsprechende Drittbibliotheken wrappen nur die APIs der unterschiedlichen Betriebssysteme, sind aber untereinander nicht kompatibel.

C#
Viel kann ich dazu nicht beitragen. Wie mik schon sagte, dir steht das .NET Framework vollumfänglich zur Verfügung. C# ist objektorientiert, also ist da auch erstmal Verstehen und Umdenken angesagt. Grafik wird unterstützt, dafür legst du dich aber auf Windows fest (mal abgesehen vom Mono Projekt, bei dem versucht wird das ganze portierbar zu machen).

Java
Sieht C# ähnlich, funktioniert aber anders. Hier bekommst du nur einen vorkompilierten Bytecode als Programm. Plattformunabhängig wird das durch die Java Virtual Machine, die du für das entsprechende Betriebssystem installieren musst und die diesen Bytecode interpretiert.


Am Ende bleibt, dass unterschiedliche Programmiersprachen für unterschiedliche Anwendungszwecke mal mehr und mal weniger geeignet sind. So etwas wie die "beste" Programmiersprache gibt es nicht. Alle halbwegs populären Programmiersprachen haben ihre Daseinsberechtigung. Neben dem Anwendungszweck ist maximal noch die Syntax einer Sprache ein Auswahlkriterium. Dem einen liegt was C-artiges mehr, der anderen steht auf eine Basic- oder Pascal-artige Syntax. Sprachen wie C, C++, C#, Java, PHP, ... haben aber syntaktische Gemeinsamkeiten. Am Ende ist das aber nicht kriegsentscheidend. Wie mik schon gesagt hat, das ist wie Vokabeln lernen. Die Sprache selbst ist nur ein kleiner Teil von dem, was Programmieren ausmacht. Der größere und wichtigerer Teile ist, zu lernen wie man mit einer Sprache zur Problemlösung kommt, also wie man Struktur und entsprechende Algorithmen aufbaut, um zum Ziel zu gelangen.

Grüße
rubberman
Mitglied: 130834
130834 Jan 19, 2017 at 20:59:59 (UTC)
Goto Top
Ich hab mich jetzt einfach mal C# zugewandt.
Da mein Kollege das schon lernt, kann er mir das Wissen super zuschaufeln.

Frage;
Unterstützt Java denn GUI?
Und
Unterstüzt C++ / C alle Plattformen?
Und
Was ist den der große Unterschied zwischen
Objektorientierten Programmiersprachen und Batch ähnlichen welche nur von oben nach unten laufen?


C++ hört sich spannend an, wollte ich auch erst nehmen,
aber mikrotik hat ja gesagt zum Einsteigen ungeeignet.

Ist aber echt nett mit der C# GUI rumzuspielen, zwar nicht sehr customizable aber es funktioniert.
Wie das dann am Ende aussieht sehen wir noch.

lg clragon
Member: rubberman
rubberman Jan 19, 2017 updated at 21:36:47 (UTC)
Goto Top
Unterstützt Java denn GUI?
Ja.

Unterstüzt C++ / C alle Plattformen?
Die Frage müsste eher umgekehrt lauten, aber ja, alle gängigen.

Was ist den der große Unterschied zwischen Objektorientierten Programmiersprachen und Batch ähnlichen welche nur von oben nach unten laufen?
Programmierparadigma

aber mikrotik hat ja gesagt zum Einsteigen ungeeignet.
Unsinn. Batch ist mit keiner anderen Sprache vergleichbar. Also musst du sowieso neu lernen. Wie gesagt, C++ ist eine objektorientierte Sprache, genau wie C#. Vom Schwierigkeitsgrad IMHO völlig egal auf welche du umsteigst. Da du aber auf Klickibunti stehst und sogar versucht hast Batch zu einem GUI umzupolen, hast du dieselben Probleme mit C++. Wenn du mittelfristig bei Windows bleiben willst, dann ist C# wohl die bessere Wahl für dich. Ist aber nur eine Vermutung, da ich nicht weiß was genau du eigentlich alles programmieren willst. Wie oben schon gesagt, sind verschiedene Sprachen auf bestimmte Anwendungsgebiete getrimmt und eignen sich dann dafür besser als andere. Webanwendungen macht man eher nicht mit C und Desktopanwendungen nicht mit PHP ...

Grüße
rubberman
Mitglied: 130834
130834 Jan 19, 2017 at 21:53:11 (UTC)
Goto Top
Da du aber auf Klickibunti stehst und sogar versucht hast Batch zu einem GUI umzupolen

versucht

screenshot_1

hust
*geschafft

Ich steh nicht darauf. Aber es ist dumm zu denken,
das ein User fähig genug wäre einen Dateipfad in einen Prompt mit der Aufforderung "Enter Path"
einzugeben und das richtig zu verwenden.
Zudem schrecklich unhandlich. ( Nehm ich mal an )
Wie auch immer scheint es für dieses Problem gar keine Lösung zu geben,
Aber das am nächsten dran wäre wohl dann die
Klickibunti
- Lösung.

Ich finde die GUI von C# nicht wundervoll. Die GUI von Discord zb ist wundervoll.
Aber dafür braucht man ziemlich lange bis man so eine Wundervolle GUI hat.


Wenn du mittelfristig bei Windows bleiben willst

Mittelfristig, ja.
Ich wollte schon immer Linux.
Nur Ist am ende des Tages mein Computer nur noch ein Chaos sobald ich
versuche es zu installieren. Vielleicht später einmal.


nicht weiß was genau du eigentlich alles programmieren willst

gute Frage. Da es nur ein Hobby ist, alles.
Für's erste denke ich mal ich nehm C#, weils grad so schön ist, später C++, HTML hat mich auch intressiert,
Java wenn Linux dann kommt oder wenn ich mich noch mehr für Android intressiere.
Ruby wohl eher nicht und PHP, der Name gefällt mir nicht.
Phyton hab ich nur in legenden gehört und sonst fallen mir keine mehr ein.
Wir sehen's ja dann. Eigentlich kann ich mich gar nicht entscheiden,
aber mein Kollege ist schon in C# drin, und super hilfreich, also warum nicht.

lg clragon
Member: rubberman
rubberman Jan 19, 2017 at 22:12:34 (UTC)
Goto Top
*geschafft
Genau genommen nicht. Weder ist es wirklich ein GUI, noch ist es Batch gewesen, was es "geschafft" hat. Eher waren es die elfundneunzig Zusatztools, die in Sprachen geschrieben wurden, die so etwas "schaffen" face-wink

Aber es ist dumm zu denken,
das ein User fähig genug wäre einen Dateipfad in einen Prompt mit der > Aufforderung "Enter Path"
einzugeben und das richtig zu verwenden.
So ist es. Selbst für einen Filebrowser ist Batch also schon ungeeignet. Du hast viel zu viel Energie reingesteckt ...
Batch ist gut als Arbeitstier um immer wiederkehrende Aufgaben zu automatisieren. Da kannst du das Fenster in die Taskleiste minimieren wo es dir ungestört die nächste Viertelstunde irgendwas stupides abnimmt. Dann kommt's auch nicht auf Performance an. Alles andere ist Spielerei, die schnell nervig wird.

Grüße
rubberman
Mitglied: 130834
130834 Feb 03, 2017 at 13:41:14 (UTC)
Goto Top
Der Thread gelöst ist, Thema beendet, es ist unmöglich, dies in Batch zustande zu bringen.

lg clragon