Comment puis-je exécuter une ligne de commande Windows en arrière-plan, sans que celle-ci interagisse avec l'utilisateur actif?
Votre question est assez vague, mais il y a un post sur ServerFault qui peut contenir les informations dont vous avez besoin. La réponse à cette question explique comment exécuter une fenêtre de fichier de commandes masquée:
Vous pouvez l'exécuter en mode silencieux à l'aide d'un fichier de script Windows. La méthode d'exécution vous permet d'exécuter un script en mode invisible. Créez un fichier
.vbs
comme celui-ciDim WinScriptHost Set WinScriptHost = CreateObject("WScript.Shell") WinScriptHost.Run Chr(34) & "C:\Scheduled Jobs\mybat.bat" & Chr(34), 0 Set WinScriptHost = Nothing
et le programmer. Le deuxième argument de cet exemple définit le style de la fenêtre. 0 signifie "cacher la fenêtre".
C’est un peu tard, mais j’ai juste rencontré cette question en cherchant moi-même la réponse et j’ai trouvé ceci:
START /B program
qui, sous Windows, est la plus proche de la commande Linux:
program &
Depuis le système HELP de la 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 problème que j'ai vu avec cela est que vous avez plus d'un programme écrit dans la fenêtre de la console, cela devient un peu déroutant et confus.
Pour qu'il n'interagisse pas avec l'utilisateur, vous pouvez rediriger la sortie vers un fichier:
START /B program > somefile.txt
Je suppose que vous voulez dire: exécutez quelque chose en arrière-plan et récupérez immédiatement la ligne de commande, le programme lancé se poursuivant.
START "" program
Quel est l'équivalent Unix de
program &
START /MIN program
le précédent est plus proche avec son équivalent Unix program &
Vous pouvez utiliser ce script PowerShell (commenté!):
# 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
Enregistrez-le dans un fichier .ps1
. Après avoir activé l'exécution du script (voir Activation des scripts dans la balise PowerShell wiki ), vous pouvez lui transmettre une ou deux chaînes: le nom de l'exécutable et éventuellement la ligne d'arguments. Par exemple:
.\hideproc.ps1 'sc' 'stop SomeService'
Je confirme que cela fonctionne sur Windows 10.
Si vous souhaitez que le programme de ligne de commande s'exécute sans que l'utilisateur le sache, définissez-le en tant que service Windows et il s'exécutera selon un planning.
Voici comment mon serveur interne PHP passe en arrière-plan. Donc, techniquement, cela devrait fonctionner pour tous.
start /B "" php -S 0.0.0.0:8000 &
Merci
Une réponse connexe, avec 2 exemples:
appelez START/B "my calc" "calc.exe"
appelez START/MIN "my mongod" "% ProgramFiles%\MongoDB\Server\3.4\bin\mongod.exe"