Come posso eseguire una riga di comando di Windows in background, senza che interagisca con l'utente attivo?
Come posso eseguire una riga di comando di Windows in background, senza che interagisca con l'utente attivo?
Risposte:
La tua domanda è piuttosto vaga, ma c'è un post su ServerFault che può contenere le informazioni di cui hai bisogno. La risposta qui descrive come eseguire una finestra di file batch nascosta:
È possibile eseguirlo in silenzio utilizzando invece un file di script di Windows. Il metodo Run consente di eseguire uno script in modalità invisibile. Crea un
.vbs
file come questoDim WinScriptHost Set WinScriptHost = CreateObject("WScript.Shell") WinScriptHost.Run Chr(34) & "C:\Scheduled Jobs\mybat.bat" & Chr(34), 0 Set WinScriptHost = Nothing
e programmarlo. Il secondo argomento in questo esempio imposta lo stile della finestra. 0 significa "nascondi la finestra".
È un po 'tardi, ma ho appena incontrato questa domanda mentre cercavo la risposta e ho trovato questo:
START /B program
che, su Windows, è il più vicino al comando Linux:
program &
Dal sistema HELP della console:
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.
Un problema che ho riscontrato è che hai più di un programma che scrive sulla finestra della console, diventa un po 'confuso e confuso.
Per evitare che interagisca con l'utente, è possibile reindirizzare l'output su un file:
START /B program > somefile.txt
start /B "" program
Sospetto che intendi: eseguire qualcosa in background e ripristinare immediatamente la riga di comando con il programma avviato in corso.
START "" program
Qual è l'equivalente di Unix di
program &
start
? Non funziona senza di essa (esegue solo una nuova istanza di comando), ma l start
'aiuto non dice nulla al riguardo, afferma che tutti i parametri sono opzionali (o non lo capisco).
start
funziona senza il parametro vuoto per me, ma mi sembra di avere una shell con una configurazione separata quando uso il parametro vuoto, come impostazione che ho fatto quando non avevo il parametro vuoto non è usato quando uso il parametro vuoto. Mi chiedo perché usano configurazioni separate?
START "" program
avvia un comando in un nuovo terminale per me, mentre program &
in Unix esegue il comando e stampa l'output sullo stesso terminale.
START /MIN program
quello sopra è molto più vicino con la sua controparte Unix program &
Puoi usare questo (commentato!) Script PowerShell:
# 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
Salvalo come .ps1
file. Dopo aver abilitato l'esecuzione dello script (vedere Abilitazione degli script nel tag wiki PowerShell ), è possibile passarlo una o due stringhe: il nome dell'eseguibile e facoltativamente la riga degli argomenti. Per esempio:
.\hideproc.ps1 'sc' 'stop SomeService'
Confermo che funziona su Windows 10.
Ecco come il mio server interno PHP va in background. Quindi tecnicamente dovrebbe funzionare per tutti.
start /B "" php -S 0.0.0.0:8000 &
Grazie
Se si desidera che il programma della riga di comando venga eseguito senza che l'utente ne sia a conoscenza, definirlo come un servizio Windows e verrà eseguito secondo una pianificazione.
schtasks
comando in Windows XP e versioni successive (avviso: schtasks
è complicato).
Una risposta correlata, con 2 esempi:
chiama START / B "my calc" "calc.exe"
chiama START / MIN "my mongod" "% ProgramFiles% \ MongoDB \ Server \ 3.4 \ bin \ mongod.exe"
call Start /MIN "c" "calc.exe"
SW_*
alla CreateProcessW
via STARTUPINFO::wShowWindow
(incluso SW_HIDE
).
Puoi vedere il modo corretto per farlo in questo link:
Come eseguire un'attività pianificata senza la visualizzazione di una finestra di comando
Riassumendo, devi selezionare "Esegui se l'utente è connesso o meno". Le credenziali dell'utente per l'attività devono essere inserite dopo aver premuto 'Ok'.
ho appena trovato questo thread di Windows 7, usando Power Shell, esegue eseguibili in background, esattamente come il nome file unix &
esempio: start -NoNewWindow nomefile
aiuto per iniziare
NAME Avvia processo
SYNTAX Start-Process [-FilePath] [[-ArgumentList]] [-Credential] [-WorkingDirectory] [-LoadUserProfile] [-NoNewWindow] [-PassThru] [-RedirectStandardError] [-RedirectStandardInput] [Outir [-WindowStyle {Normale | Nascosto | Ridotto a icona | Maximized}] [-UseNewEnvironment] []
Start-Process [-FilePath] <string> [[-ArgumentList] <string[]>] [-WorkingDirectory <string>] [-PassThru] [-Verb
<string>] [-Wait] [-WindowStyle <ProcessWindowStyle> {Normal | Hidden | Minimized | Maximized}]
[<CommonParameters>]
Inizia la linfa degli ALIASI