¿Cómo puedo ejecutar una línea de comandos de Windows en segundo plano, sin que interactúe con el usuario activo?
¿Cómo puedo ejecutar una línea de comandos de Windows en segundo plano, sin que interactúe con el usuario activo?
Respuestas:
Su pregunta es bastante vaga, pero hay una publicación en ServerFault que puede contener la información que necesita. La respuesta allí describe cómo ejecutar una ventana de archivo por lotes oculta:
En su lugar, puede ejecutarlo en silencio usando un archivo de Windows Script. El Método de ejecución le permite ejecutar un script en modo invisible. Crea un
.vbs
archivo como esteDim WinScriptHost Set WinScriptHost = CreateObject("WScript.Shell") WinScriptHost.Run Chr(34) & "C:\Scheduled Jobs\mybat.bat" & Chr(34), 0 Set WinScriptHost = Nothing
y programarlo El segundo argumento en este ejemplo establece el estilo de la ventana. 0 significa "ocultar la ventana".
Esto es un poco tarde pero me encontré con esta pregunta mientras buscaba la respuesta y encontré esto:
START /B program
que, en Windows, es el más cercano al comando de Linux:
program &
Desde el sistema de ayuda de la consola:
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 que vi con él es que tienes más de un programa escribiendo en la ventana de la consola, se vuelve un poco confuso y confuso.
Para que no interactúe con el usuario, puede redirigir la salida a un archivo:
START /B program > somefile.txt
start /B "" program
, funcionó ...
Sospecho que quiere decir: ejecute algo en segundo plano y recupere la línea de comando inmediatamente con el programa iniciado continuando.
START "" program
¿Cuál es el equivalente de Unix de
program &
start
? No funciona sin él (ejecuta solo una nueva instancia de comando), pero start
la ayuda no dice nada al respecto, afirma que todos los parámetros son opcionales (o no lo entiendo).
start
funciona sin el parámetro vacío para mí, pero parece que obtengo un shells con una configuración separada cuando uso el parámetro vacío, como una configuración que hice cuando no tenía el parámetro vacío no se usa cuando uso El parámetro vacío. Me pregunto por qué usan configuraciones separadas.
START "" program
inicia un comando en una nueva terminal para mí, mientras que program &
en Unix ejecuta el comando e imprime la salida en la misma terminal.
START /MIN program
el anterior está bastante más cerca con su contraparte de Unix program &
Puede usar este script de PowerShell (¡comentado!):
# 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
Guárdelo como un .ps1
archivo. Después de habilitar la ejecución del script (consulte Habilitación de scripts en el wiki de la etiqueta de PowerShell ), puede pasarle una o dos cadenas: el nombre del ejecutable y, opcionalmente, la línea de argumentos. Por ejemplo:
.\hideproc.ps1 'sc' 'stop SomeService'
Confirmo que esto funciona en Windows 10.
Así es como mi servidor interno PHP entra en segundo plano. Entonces, técnicamente debería funcionar para todos.
start /B "" php -S 0.0.0.0:8000 &
Gracias
Si desea que el programa de línea de comandos se ejecute sin que el usuario lo sepa, defínalo como un Servicio de Windows y se ejecutará según un cronograma.
schtasks
comando en Windows XP y superior (advertencia: schtasks
es complicado).
Una respuesta relacionada, con 2 ejemplos:
llame a START / B "my calc" "calc.exe"
llame a START / MIN "my mongod" "% ProgramFiles% \ MongoDB \ Server \ 3.4 \ bin \ mongod.exe"
call Start /MIN "c" "calc.exe"
SW_*
a la CreateProcessW
vía STARTUPINFO::wShowWindow
(incluido SW_HIDE
).
Puede ver la forma correcta de hacer esto en este enlace:
Cómo ejecutar una tarea programada sin que aparezca una ventana de comando
En resumen, debe marcar la casilla 'Ejecutar si el usuario ha iniciado sesión o no'. Las credenciales de usuario de la tarea deben ingresarse después de presionar 'Ok'.
acabo de encontrar este hilo windows 7, usando power shell, ejecuta ejecutables en segundo plano, exactamente igual que unix filename &
ejemplo: inicio -NoNewWindow nombrearchivo
ayuda para comenzar
NOMBRE Proceso de inicio
Proceso de inicio SYNTAX [-FilePath] [[-ArgumentList]] [-Credential] [-WorkingDirectory] [-LoadUserProfile] [-NoNewWindow] [-PassThru] [-RedirectStandardError] [-RedirectStandardInput] [-Redirect] [-WindowStyle {Normal | Oculto | Minimizado | Maximizado}] [-UseNewEnvironment] []
Start-Process [-FilePath] <string> [[-ArgumentList] <string[]>] [-WorkingDirectory <string>] [-PassThru] [-Verb
<string>] [-Wait] [-WindowStyle <ProcessWindowStyle> {Normal | Hidden | Minimized | Maximized}]
[<CommonParameters>]
Alias saps comienzan