2014-01-09 20 views
14

In Linux können Sie Befehl& Befehl auf dem Hintergrund ausführen, das gleiche wird fortgesetzt, nachdem die Shell offline ist. Ich frage mich, ist es so etwas wie das für Fenster ...Wie führe ich einen Befehl im Hintergrund unter Windows aus?

+1

Gute Frage, sollte aber bei [SuperUser] (http://superuser.com) gefragt werden. Soweit ich weiß, gibt es keine solche Einrichtung. Windows verwendet Dienste für Hintergrundaufgaben ohne Shell, aber sie müssen speziell codiert sein - Sie können nicht einfach irgendeinen Befehl als Dienst ausführen. Am nächsten kommt vielleicht der Start-Befehl, der eine neue Shell startet. – paddy

+1

@paddy aber wenn ich 'start' verwende, wird es aufhören zu laufen, sobald ich offline bin, oder? – Louis

+1

Ja, das ist richtig. Prozesse, die mit 'start' gestartet wurden, werden beim Abmelden beendet. Daher ist es nicht für lange laufende Remote-Hintergrundjobs geeignet. – Anthony

Antwort

9

Ich nehme an, was Sie tun möchten, ist ein Befehl ohne eine Schnittstelle (möglicherweise automatisch?) ausführen. Auf Windows gibt es eine Anzahl der Optionen für das, was Sie suchen:

  • Am besten: Schreiben Sie Ihr Programm als Windows-Dienst. Diese werden gestartet, wenn sich niemand beim Server anmeldet. Sie können Sie das Benutzerkonto auswählen (das anders als Ihr eigenes sein kann), und sie werden neu gestartet, wenn sie fehlschlagen. Diese laufen die ganze Zeit, so dass Sie Aufgaben zu bestimmten Zeiten oder nach einem regelmäßigen Zeitplan in ihnen automatisieren können. Weitere Informationen zum Schreiben eines Windows-Dienstes finden Sie online in einem Lernprogramm wie (http://msdn.microsoft.com/en-us/library/zt39148a(v=vs.110).aspx).

  • Besser: Starten Sie den Befehl und verstecken Sie das Fenster. Angenommen, der Befehl ist ein DOS-Befehl, können Sie dafür ein VB- oder C# -Skript verwenden. Weitere Informationen finden Sie unter here. Ein Beispiel ist:

    Set objShell = WScript.CreateObject("WScript.Shell") 
    objShell.Run("C:\yourbatch.bat"), 0, True 
    

    Sie werden immer noch den Befehl manuell starten oder eine Aufgabe schreiben müssen, um den Befehl zu starten. Dies ist einer der größten Rückschläge dieser Strategie.

  • Am schlimmsten: Starten Sie den Befehl mit dem Autostart-Ordner. Dies wird ausgeführt, wenn sich ein Benutzer am Computer anmeldet.

Hoffe, dass das hilft!

+1

Wenn Sie nur VS Express haben, dann ist dies eine Möglichkeit, einen Windows-Dienst zu erstellen: http://www.codeproject.com/Articles/106742/Creating-a-simple-Windows-Service – Graham

23

Ich glaube, der Befehl Sie suchen, start /b *command*

für Unix ist, nohup stellt ‚keine hangup‘, die als Hintergrundjob etwas anders ist (was würde Ich glaube, dass der obige Befehl ähnlich einem Hintergrundjob für Windows sein sollte

+3

frage: start/b * befehl * wird aufhören zu laufen, sobald ich vom server abmelden oder? und ja, tut mir leid, ich bin 'command &' nicht 'nohup' – Louis

+0

Siehe diese Antwort: http://stackoverflow.com/a/3382087/1751190 Ich glaube schon, aber ich bin nicht positiv. Ich würde es selbst testen, aber ich bin gerade nicht in der Nähe eines Windows-Computers. – Oeste

+2

Nur als eine Bestätigung: Ja, der Befehl wird sterben, wenn Sie sich abmelden (wenn Sie auf der Windows-Maschine von einem Telnet verbunden, um den Befehl auszuführen). – msb

2

Sie sollten sich auch den Befehl at in Windows ansehen. Es startet ein Programm zu einer bestimmten Zeit im Hintergrund, was in diesem Fall funktioniert.

Eine weitere Option ist die Verwendung der Service Manager-Software nssm. Dadurch wird der Befehl, den Sie als Windows-Dienst ausführen, umbrochen.

Verwandte Themen