Anwendung beim Schließen automatisch neu starten

24944
Sid

Ich habe eine Server-Anwendung, die ich ausführen möchte, wenn der Computer ausgeführt wird. Dies ist normalerweise der Fall. Nur manchmal finde ich, dass es von alleine geschlossen wurde.

Gibt es ein Fledermaus oder ein Skript, das ich ausführen kann, um die Anwendung zu überwachen und neu zu starten, sollte sie geschlossen werden?

10
Welche Art von Anwendung und wie fängt sie normalerweise an? Als Dienst, in der Registrierung als Ausführungsbefehl oder im Startordner? KCotreau vor 13 Jahren 0
Befehl zum Ausführen der Registry. mit der Option '-start'. Sid vor 13 Jahren 0
Was passiert derzeit, wenn Sie diesen Befehl erneut ausführen, während die App bereits läuft? KCotreau vor 13 Jahren 0
nichts. Der Befehl erkennt, dass die Anwendung bereits läuft. Sid vor 13 Jahren 0

5 Antworten auf die Frage

9
sgmoore

Dies funktioniert nicht immer (es hängt irgendwie davon ab, wie das Programm sich selbst lädt), aber normalerweise können Sie eine Batchdatei wie folgt erstellen:

@Echo off :Start NotePad echo Program terminated at %Date% %Time% with Error %ErrorLevel% >> c:\logs\program.log  echo Press Ctrl-C if you don't want to restart automatically ping -n 10 localhost  goto Start 

Ich habe Notepad als Beispiel verwendet.

Die Linien

echo Press Ctrl-C if you don't want to restart automatically ping -n 10 localhost 

Eine Verzögerung von 10 Sekunden gibt dem Benutzer die Möglichkeit, den Vorgang abzubrechen, bevor er erneut gestartet wird.

Die Linie

echo Program terminated at %Date% %Time% with Error %ErrorLevel% >> c:\logs\program.log 

ist nicht erforderlich, würde jedoch jedes Mal protokollieren, wenn das Programm in einer Datei geschlossen wurde. Daher kann es hilfreich sein, das Problem zu diagnostizieren. Der ErrorLevel zeigt Ihnen möglicherweise nicht viel, aber ein Programm soll 0 zurückgeben, wenn es normal geschlossen wurde -Zero-Nachricht, falls nicht

Beachten Sie, dass Sie erwähnen, dass Ihr Programm nichts tut, wenn es bereits läuft. Das bedeutet in der Regel, dass die Anwendung startet, erkennt, dass bereits eine andere Kopie läuft, und wird sofort heruntergefahren. Wenn dies der Fall ist und Ihr Programm ausgeführt wird, bevor Sie diese Batchdatei starten, wird der Stapel in einer Schleife durchlaufen und versucht, das Programm alle zehn Sekunden zu starten.

"Dann wird der Stapel in einer Schleife abgespielt und versucht, alle zehn Sekunden Ihr Programm zu starten." Ist das eine schlechte Sache? posfan12 vor 8 Jahren 0
Vielen Dank!! Ein wenig Copy & Paste um 12:52 Uhr, und ich kann schlafen gehen, ohne sich (zu viel) Sorgen darüber zu machen, was ich am Morgen finden werde (oder nicht finde). Uh. am Morgen nach dem Schlafengehen. Spike0xff vor 7 Jahren 0
2
KCotreau

Basierend auf Ihren obigen Antworten schlage ich vor, dass Sie diesen Befehl in eine Batchdatei schreiben und diese Batchdatei dann so einstellen, dass sie jede Minute als geplante Aufgabe ausgeführt wird. Damit ist praktisch kein Overhead verbunden, und es stellt sicher, dass Ihr Prozess unabhängig davon, ob Sie in der Nähe sind, angegeben wird, um zu erkennen, dass er überhaupt angehalten wurde.

Dies erscheint mir eine ziemlich unbeholfene und ineffiziente Lösung, wenn auch schnell. Gibt es vielleicht ein besseres Mittel zum selben Zweck? Danke für Ihre Hilfe!!! Sid vor 13 Jahren 0
Sid, wie gesagt, der Aufwand ist SEHR minimal und es ist EINFACH zu tun. Wenn Sie einen Weg finden möchten, etwas zu codieren, um zu überprüfen, ob es läuft, und dann erneut zu starten, fühlen Sie sich frei, aber ich mache das schon lange mit positiven Ergebnissen. Dies ist eine gebräuchliche Methode, wenn sich Anwendungen auf einem Server befinden, die nicht mehr laufen. KCotreau vor 13 Jahren 0
Bei weitem die einfachste Methode. Und es gibt keinen Aufwand. surfasb vor 11 Jahren 0
2
Steve Mallam

Ich denke, die richtige Antwort auf diese Frage hängt davon ab, warum Sie es tun wollen. Versuchen Sie versehentliches Herunterfahren zu lösen? Zufälliges "bösartiges" Herunterfahren durch Benutzer der Maschine verhindern (zB Mitarbeiter schließen Überwachungssoftware)? Verhindern Sie schwerwiegende und qualifizierte bösartige Angriffe? Versuchen Sie, selbst Malware zu schreiben (in diesem Fall bitte abhauen ;-))?

Wie andere Kommentatoren bereits erwähnt haben, würde es anders aussehen, wenn Sie einen Windows-Dienst (z. B.) geschrieben hätten.

Persönlich würde ich wahrscheinlich damit beginnen, eine zweite Bewerbung zu schreiben und sie auf dieselbe Weise zu starten. Lassen Sie beide Anwendungen regelmäßig nach einander scannen und starten Sie sie gegebenenfalls erneut. Stellen Sie sicher, dass die Anwendung ordnungsgemäß geschlossen werden kann.

Das sagte, und angesichts Ihres Kommentars "Manchmal finde ich, dass ich von alleine geschlossen habe", würde ich eigentlich versuchen, herauszufinden, warum es geschlossen ist ...

Ich benutze den Computer als Medienserver und die anstößige Anwendung ist mediaserver.exe. Nichts böswillig. Ich kann kein Szenario vorhersehen, in dem die Anwendung geschlossen werden würde, aber wenn es so wäre, gäbe es keinen Grund, warum ich das Skript oder den Schläger nicht vorher stoppen könnte. Ich kann auch keine Software schreiben, bin aber mit bat-Dateien vertraut. dh ich bin ein Noob. Sid vor 13 Jahren 0
Entschuldigung - das würde ich denken, ich wäre in der Gruppe "Programmierer" und dass Sie die App selbst geschrieben haben :-) Unbeholfen, wie es sich anhört, würde ich die von @KCotreau beschriebene "geplante Aufgabe" vorschlagen Steve Mallam vor 13 Jahren 0
1
Saxtus

You can use a program called ReStartMe 2.0 that does exactly that:

Monitors for processes and restarts them if they close.

-1
Rottweiler Games

das ist viel besser! Dies ist ein Code, den ich für einen Minetest-Spieleserver verwendet habe, der in einer .bat-Datei gespeichert werden sollte

@echo off rem This is a comment line rem This one is a comment too rem Following line ensures the working directory is searched in C: C: rem Join the correct directory, where the server stuff lies in: cd "C:\Users\morenavaj\Documents\minetest-0.4.16-win64 - Lone_Wolf\" :love_spaghetti_code bin\server.lnk --config minetest.conf ^ --worldname "Land of Blockheads" ^ --gameid minetest_game ^ --port 30000 ^ --logfile bin/debug.txt  echo Restarting server.... goto love_spaghetti_code  echo Done (this should never, ever, happen)