Wie kann ich eine Windows-Befehlszeile im Hintergrund ausführen, ohne mit dem aktiven Benutzer zu interagieren?
Wie kann ich eine Windows-Befehlszeile im Hintergrund ausführen, ohne mit dem aktiven Benutzer zu interagieren?
Antworten:
Ihre Frage ist ziemlich vage, aber es gibt einen Beitrag auf ServerFault, der möglicherweise die benötigten Informationen enthält. Die Antwort dort beschreibt, wie ein verstecktes Batch-Dateifenster ausgeführt wird:
Sie können es stattdessen im Hintergrund mithilfe einer Windows-Skriptdatei ausführen. Mit der Run-Methode können Sie ein Skript im unsichtbaren Modus ausführen. Erstellen Sie eine
.vbs
Datei wie dieseDim WinScriptHost Set WinScriptHost = CreateObject("WScript.Shell") WinScriptHost.Run Chr(34) & "C:\Scheduled Jobs\mybat.bat" & Chr(34), 0 Set WinScriptHost = Nothing
und planen Sie es. Das zweite Argument in diesem Beispiel legt den Fensterstil fest. 0 bedeutet "Fenster verstecken".
Das ist ein bisschen spät, aber ich bin gerade auf diese Frage gestoßen, als ich selbst nach der Antwort gesucht habe, und habe Folgendes gefunden:
START /B program
Dies ist unter Windows der Befehl, der dem Linux-Befehl am nächsten kommt:
program &
Über das Konsolen-Hilfesystem:
C:\>HELP START
Starts a separate window to run a specified program or command.
START ["title"] [/D path] [/I] [/MIN] [/MAX] [/SEPARATE | /SHARED]
[/LOW | /NORMAL | /HIGH | /REALTIME | /ABOVENORMAL | /BELOWNORMAL]
[/NODE <NUMA node>] [/AFFINITY <hex affinity mask>] [/WAIT] [/B]
[command/program] [parameters]
"title" Title to display in window title bar.
path Starting directory.
B Start application without creating a new window. The
application has ^C handling ignored. Unless the application
enables ^C processing, ^Break is the only way to interrupt
the application.
Ein Problem, das ich dabei gesehen habe, ist, dass Sie mehr als ein Programm im Konsolenfenster haben, es wird etwas verwirrend und durcheinander.
Damit es nicht mit dem Benutzer interagiert, können Sie die Ausgabe in eine Datei umleiten:
START /B program > somefile.txt
start /B "" program
Ich vermute, Sie meinen: Führen Sie etwas im Hintergrund aus und rufen Sie die Befehlszeile sofort wieder auf, während das gestartete Programm fortgesetzt wird.
START "" program
Welches ist das Unix-Äquivalent von
program &
start
? Es funktioniert nicht ohne es (führt nur eine neue Befehlsinstanz aus), aber start
die Hilfe sagt nichts darüber aus, es besagt, dass alle Parameter optional sind (oder ich verstehe es nicht).
start
funktioniert für mich ohne den leeren Parameter, aber wenn ich den leeren Parameter verwende, bekomme ich anscheinend eine Shell mit einer separaten Konfiguration, da eine Einstellung, die ich vorgenommen habe, als ich den leeren Parameter nicht hatte, nicht verwendet wird, wenn ich sie verwende der leere Parameter. Ich frage mich, warum sie separate Konfigurationen verwenden?
START "" program
startet einen Befehl in einem neuen Terminal für mich, während program &
in Unix der Befehl ausgeführt wird und die Ausgabe auf dem gleichen Terminal gedruckt wird.
START /MIN program
Das obige ist dem Unix-Gegenstück ziemlich nahe program &
Sie können dieses (kommentierte!) PowerShell-Skript verwenden:
# Create the .NET objects
$psi = New-Object System.Diagnostics.ProcessStartInfo
$newproc = New-Object System.Diagnostics.Process
# Basic stuff, process name and arguments
$psi.FileName = $args[0]
$psi.Arguments = $args[1]
# Hide any window it might try to create
$psi.CreateNoWindow = $true
$psi.WindowStyle = 'Hidden'
# Set up and start the process
$newproc.StartInfo = $psi
$newproc.Start()
# Return the process object to the caller
$newproc
Speichern Sie es als .ps1
Datei. Nachdem Sie die Skriptausführung aktiviert haben (siehe Aktivieren von Skripten im PowerShell-Tag-Wiki ), können Sie eine oder zwei Zeichenfolgen übergeben: den Namen der ausführbaren Datei und optional die Argumentzeile. Zum Beispiel:
.\hideproc.ps1 'sc' 'stop SomeService'
Ich bestätige, dass dies unter Windows 10 funktioniert.
So geht mein PHP-interner Server in den Hintergrund. Also sollte es technisch für alle funktionieren.
start /B "" php -S 0.0.0.0:8000 &
Vielen Dank
Wenn Sie möchten, dass das Befehlszeilenprogramm ausgeführt wird, ohne dass der Benutzer etwas davon weiß, definieren Sie es als Windows-Dienst und es wird nach einem Zeitplan ausgeführt.
schtasks
Befehl in Windows XP und höher verwenden (Warnung: schtasks
ist kompliziert).
Eine verwandte Antwort mit 2 Beispielen:
Rufe START / B "my calc" "calc.exe" auf
Rufen Sie START / MIN "my mongod" "% ProgramFiles% \ MongoDB \ Server \ 3.4 \ bin \ mongod.exe" auf.
call Start /MIN "c" "calc.exe"
SW_*
um CreateProcessW
über STARTUPINFO::wShowWindow
(einschließlich SW_HIDE
).
Den richtigen Weg dazu finden Sie unter folgendem Link:
Ausführen einer geplanten Aufgabe, ohne dass ein Befehlsfenster angezeigt wird
Zusammenfassend müssen Sie das Kontrollkästchen "Ausführen, ob Benutzer angemeldet ist oder nicht" aktivieren. Task-Benutzeranmeldeinformationen müssen nach dem Klicken auf "OK" eingegeben werden.
bin gerade auf diesen Thread gestoßen, in dem Windows 7 mit Power Shell ausführbare Dateien im Hintergrund ausführt, genau wie Unix-Dateiname &
Beispiel: Start -NoNewWindow Dateiname
hilf mit anzufangen
NAME Start-Prozess
SYNTAX-Startprozess [-FilePath] [[-ArgumentList]] [-Credential] [-WorkingDirectory] [-LoadUserProfile] [-NoNewWindow] [-PassThru] [-RedirectStandardError] [-RedirectStandardInput] [-RedirectStandardInput] [-WindowStyle {Normal | Versteckte | Minimiert | Maximiert}] [-UseNewEnvironment] []
Start-Process [-FilePath] <string> [[-ArgumentList] <string[]>] [-WorkingDirectory <string>] [-PassThru] [-Verb
<string>] [-Wait] [-WindowStyle <ProcessWindowStyle> {Normal | Hidden | Minimized | Maximized}]
[<CommonParameters>]
Aliase saps beginnen