web-dev-qa-db-fra.com

Exécuter le fichier de commandes en arrière-plan

J'ai un fichier de commandes que je veux exécuter en arrière-plan chaque fois que le système (Windows 2007) est activé. Le fichier de commandes surveille la liste des tâches pour un programme donné et, lorsqu'il se voit arrêté, invite l'utilisateur à le retirer de la licence.

J'essaie actuellement de le faire sans convertir le fichier de commandes en un fichier de service exécutable ou Windows.

J'ai trouvé plus de références en ligne que je ne peux en compter qui me disent que je devrais utiliser "start/b file.bat" pour exécuter le fichier batch en arrière-plan, mais cela ne fonctionne pas pour moi, cela ne fait que démarrer le lot. déposer dans la même fenêtre de ligne de commande que j'utilise.

Quelqu'un peut-il suggérer ce qui ne va pas ou même mieux? un moyen simple et agréable pour moi de faire démarrer le fichier de commandes par lot (je ne peux pas utiliser une interface graphique, car je dois le déployer sur plusieurs ordinateurs à distance)

Merci

2
WRJ

Vous pouvez créer un raccourci vers votre fichier de commandes et le placer dans votre répertoire Programmes de démarrage :

C:\Utilisateurs \\ AppData\Roaming\Microsoft\Windows\Menu Démarrer\Programmes\Démarrage

Etant donné que vous devez le déployer sur plusieurs ordinateurs à distance, vous devriez pouvoir copier le fichier de commandes dans le répertoire des programmes de démarrage sur le réseau, à condition que WinRM soit activé sur les ordinateurs distants et que votre compte dispose des autorisations appropriées.

Si vous souhaitez que ce fichier de commandes s'exécute en arrière-plan au démarrage, vous pouvez référencer votre fichier de commandes à partir d'un VBScript (au lieu d'utiliser le raccourci du fichier de commandes) et configurer le VBscript pour qu'il s'exécute en mode invisible :

Set WshShell = CreateObject("WScript.Shell") 
WshShell.Run chr(34) & "C:\path\to\your\batchfile.bat" & Chr(34), 0
Set WshShell = Nothing

Donnez simplement à ce fichier vbscript l’extension .vbs.

1
Adam

Si le programme qui vous préoccupe est un programme à interface graphique (c'est-à-dire non console), attendez simplement qu'il se ferme. Batch attend que les programmes graphiques se terminent (mais pas lorsqu'ils sont lancés de manière interactive).

notepad
echo My notepad exited

Start /b dit à démarrer le programme dans la même fenêtre . Voir Start /?. De plus, Start est généralement la mauvaise commande à utiliser. Il démarre les programmes de anormal . Voir la fin de http://stackoverflow.com/questions/41030190/command-to-run-a-bat-file/41049135#41049135 pour savoir comment démarrer des programmes.

Ceci est un fichier VBS.

Cela surveille la sortie du bloc-notes, ouvre une boîte de message et redémarre le bloc-notes.

Set WshShell = WScript.CreateObject("WScript.Shell")
Set objWMIService = GetObject("winmgmts:\\.\root\CIMV2") 
Set objEvents = objWMIService.ExecNotificationQuery("SELECT * FROM Win32_ProcessStopTrace")

Do
    Set objReceivedEvent = objEvents.NextEvent
    msgbox objReceivedEvent.ProcessName
    If lcase(objReceivedEvent.ProcessName) = lcase("Notepad.exe") then 
        Msgbox "Process exited with exit code " & objReceivedEvent.ExitStatus
        WshShell.Run "c:\Windows\notepad.exe", 1, false
    End If
Loop

Cela devrait utiliser moins de batterie et de cycles de processeur. Les fichiers de traitement par lots sont lus ligne par ligne, alors effectuez TRES de mauvaises tâches en arrière-plan.

Si le programme qui vous préoccupe est un programme à interface graphique (c'est-à-dire non console), attendez simplement qu'il se ferme. Batch attend que les programmes graphiques se terminent (mais pas lorsqu'ils sont lancés de manière interactive).

notepad
echo My notepad exited
0
ACatInLove