Comment puis-je exécuter une ligne de commande Windows en arrière-plan, sans que celle-ci interagisse avec l'utilisateur actif?
Comment puis-je exécuter une ligne de commande Windows en arrière-plan, sans que celle-ci interagisse avec l'utilisateur actif?
Réponses:
Votre question est assez vague, mais il existe un article 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éer un
.vbs
fichier 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 est qu’il ya 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
start /B "" program
cela fonctionnait alors ...
Je suppose que vous voulez dire: exécutez quelque chose en arrière-plan et récupérez la ligne de commande immédiatement, le programme lancé se poursuivant.
START "" program
Quel est l'équivalent Unix de
program &
start
? Cela ne fonctionne pas sans cela (exécute seulement une nouvelle instance de commande), mais start
l'aide ne dit rien à ce sujet, il indique que tous les paramètres sont facultatifs (ou que je ne le comprends pas).
start
fonctionne sans le paramètre vide pour moi, mais il semble que je reçoive des shells avec une configuration distincte lorsque j'utilise le paramètre vide. Un paramètre que j'ai fait lorsque je n'avais pas le paramètre vide n'est pas utilisé lorsque je l'utilise. le paramètre vide. Je me demande pourquoi ils utilisent des configurations séparées?
START "" program
lance une commande dans un nouveau terminal pour moi, tandis program &
qu'Unix l'exécute et affiche la sortie sur le même terminal.
START /MIN program
ce qui précède est assez proche avec son homologue 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 sous forme de .ps1
fichier. Après avoir activé l'exécution du script (voir Activation des scripts dans le wiki de la balise PowerShell ), 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.
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
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.
schtasks
commande dans Windows XP et versions ultérieures (avertissement: schtasks
est compliqué).
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"
call Start /MIN "c" "calc.exe"
SW_*
à CreateProcessW
via STARTUPINFO::wShowWindow
(y compris SW_HIDE
).
Vous pouvez voir la bonne façon de faire ceci dans ce lien:
Comment exécuter une tâche planifiée sans qu'une fenêtre de commande ne s'affiche
Pour résumer, vous devez cocher la case "Exécuter si l'utilisateur est connecté ou non". Les informations d'identification de l'utilisateur de la tâche doivent être entrées après avoir appuyé sur 'Ok'.
vient de tomber sur ce fil Windows 7, à l'aide de Power Shell, exécute les exécutables en arrière-plan, exactement comme Unix nomfichier &
exemple: start -NoNewWindow nomfichier
aider à démarrer
NAME Start-Process
Le processus de démarrage SYNTAX [-WindowStyle {Normal | Caché | Minimisé | Maximisé}] [-UseNewEnvironment] []
Start-Process [-FilePath] <string> [[-ArgumentList] <string[]>] [-WorkingDirectory <string>] [-PassThru] [-Verb
<string>] [-Wait] [-WindowStyle <ProcessWindowStyle> {Normal | Hidden | Minimized | Maximized}]
[<CommonParameters>]
ALIASES saps start