web-dev-qa-db-fra.com

Comment puis-je exécuter une ligne de commande Windows en arrière-plan?

Comment puis-je exécuter une ligne de commande Windows en arrière-plan, sans que celle-ci interagisse avec l'utilisateur actif?

144

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-ci

Dim 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".

32
nhinkle

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
217
Novicaine

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 &
67
Paul Douglas
START /MIN program 

le précédent est plus proche avec son équivalent Unix program &

11
Siva Sankaran

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.

5
Ben N

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.

1
CarlF

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

1
Suyash Jain

Une réponse connexe, avec 2 exemples:

  1. Ci-dessous ouvre calc.exe:

appelez START/B "my calc" "calc.exe"

  1. Parfois, le premier plan n'est pas souhaitable, puis vous exécutez comme indiqué ci-dessous:

appelez START/MIN "my mongod" "% ProgramFiles%\MongoDB\Server\3.4\bin\mongod.exe"

0