Ceci est un fichier batch sous Windows.
Voici mon fichier .bat
@echo off
copy "C:\Remoting.config-Training" "C:\Remoting.config"
"C:\ThirdParty.exe"
Cela fonctionne correctement, sauf que le fichier .bat laisse la fenêtre de commande ouverte pendant tout le temps que l'application "ThirdParty" est en cours d'exécution.
J'ai besoin de la fenêtre de commande pour se fermer.
J'utiliserais le raccourci pour l'application, mais je dois être capable d'exécuter cette commande de copie en premier (elle change en fait la base de données et le serveur à utiliser pour l'application).
L'application ThirdParty ne permet pas à l'utilisateur de changer la source de la base de données ou le serveur d'applications.
Nous faisons cela pour permettre aux utilisateurs de passer d'un environnement de test à un environnement de production.
Utiliser start
fonctionne pour moi:
@echo off
copy "C:\Remoting.config-Training" "C:\Remoting.config"
start C:\ThirdParty.exe
EDIT: Ok, en regardant de plus près, start
semble interpréter le premier paramètre comme le titre de la nouvelle fenêtre si elle est citée. Ainsi, si vous devez indiquer le chemin d'accès à votre ThirdParty.exe, vous devez également fournir une chaîne de titre.
Exemples:
:: Title not needed:
start C:\ThirdParty.exe
:: Title needed
start "Third Party App" "C:\Program Files\Vendor\ThirdParty.exe"
Créer un .vbs
fichier avec ce code:
CreateObject("Wscript.Shell").Run "your_batch.bat",0,True
Cette .vbs
va courir your_batch.bat
caché.
Fonctionne bien pour moi.
Essaye ça:
@echo off
copy "C:\Remoting.config-Training" "C:\Remoting.config"
start C:\ThirdParty.exe
exit
Excellent conseil. Cela fonctionne avec les fichiers batch qui exécutent un programme Java également.
start javaw -classpath "%CP%" main.Main
Utiliser start
fonctionne bien, sauf si vous utilisez un langage de script. Heureusement, il existe un moyen de sortir Python - utilisez simplement pythonw.exe
au lieu de python.exe
:
:: Title not needed:
start pythonw.exe application.py
Si vous avez besoin de devis, procédez comme suit:
:: Title needed
start "Great Python App" pythonw.exe "C:\Program Files\Vendor\App\application.py"
Vous voudrez peut-être essayer mon programme silentbatch , qui lancera un .bat
/.cmd
script, supprime entièrement la création de la fenêtre d'invite de commandes (pour ne pas la voir apparaître puis disparaître) et éventuellement enregistrer le résultat dans un fichier spécifié.
Vous pouvez créer un script VBS qui forcera la fenêtre à être masquée.
Set WshShell = WScript.CreateObject("WScript.Shell")
obj = WshShell.Run("""C:\Program Files (x86)\McKesson\HRS
Distributed\SwE.bat""", 0)
set WshShell = Nothing
Ensuite, plutôt que d'exécuter le fichier de commandes, exécutez le script.
Je n'ai pas vraiment trouvé le bon moyen de le faire en natif, alors j'utilise un utilitaire appelé hstart qui le fait pour moi. S'il y a une manière plus ordonnée de le faire, ce serait bien.
Ou vous pouvez utiliser:
Start /d "the directory of the executable" /b "the name of the executable" "parameters of the executable" %1
Si% 1 est un fichier, il est transmis à votre exécutable. Par exemple dans notepad.exe foo.txt
% 1 est "foo.txt".
Le /b
paramètre de la commande de démarrage fait ceci:
Démarre une application sans ouvrir une nouvelle fenêtre d'invite de commande. CTRL+C la gestion est ignorée sauf si l'application permet CTRL+C En traitement. Utilisation CTRL+BREAK d'interrompre l'application.
Ce qui est exactement ce que nous voulons.
Compilez le fichier de commandes dans un fichier exécutable à l’aide de Batch2Exe http://www.f2ko.de/programs.php?lang=en&pid=b2e . Utilisez l'option "Fenêtre invisible".
S'il vous plaît utiliser celui-ci, ce qui précède ne fonctionne pas. J'ai testé dans Windows Server 2003.
@echo off
copy "C:\Remoting.config-Training" "C:\Remoting.config"
Start /I "" "C:\ThirdParty.exe"
exit
Pour que la fenêtre de commande d'un fichier .bat qui exécute une sortie de fichier .exe le plus rapidement possible, utilisez la ligne @start
avant le fichier que vous essayez d’exécuter. Voici un exemple:
(insert other code here)
@start executable.exe
(insert other code here)
Vous n'êtes pas obligé d'utiliser un autre code avec @start executable.exe
.
À l'aide de l'API Windows, nous pouvons démarrer un nouveau processus, une application console et masquer sa fenêtre "noire". Cela peut être fait lors de la création du processus et éviter d'afficher la fenêtre "noire".
Dans CreateProcess , le paramètre dwCreationFlags
peut avoir CREATE_NO_WINDOW
The process is a console application that is being run
without a console window. Therefore, the console handle
for the application is not set. This flag is ignored if
the application is not a console application
Voici un lien vers exécutable hide-win32-console-window en utilisant cette méthode et code source .
hide-win32-console-window
est similaire à le programme silentbatch de Jamesdlin .
Il y a une question ouverte: que faire avec la sortie du programme lorsque sa fenêtre n'existe pas? Et si des exceptions se produisaient? Pas une bonne solution pour jeter la sortie. hide-win32-console-window
utilise des canaux anonymes pour rediriger la sortie du programme vers un fichier créé dans le répertoire en cours.
batchscript_starter.exe complet/chemin/vers/application [ arguments à transmettre =]
batchscript_starter.exe c:\Python27\python.exe -c "import time; print('prog start'); time.sleep(3.0); print('prog end');"
Le fichier de sortie est créé dans le répertoire de travail nommé python.2019-05-13-13-32-39.log
avec le résultat de la commande python:
prog start
prog end
batchscript_starter.exe C:\WINDOWS\system32\cmd.exe /C dir .
Le fichier de sortie est créé dans le répertoire de travail nommé cmd.2019-05-13-13-37-28.log
avec sortie de CMD:
Volume in drive Z is Storage
Volume Serial Number is XXXX-YYYY
Directory of hide_console_project\hide-win32-console-window
2019-05-13 13:37 <DIR> .
2019-05-13 13:37 <DIR> ..
2019-05-13 04:41 17,274 batchscript_starter.cpp
2018-04-10 01:08 46,227 batchscript_starter.ico
2019-05-12 11:27 7,042 batchscript_starter.rc
2019-05-12 11:27 1,451 batchscript_starter.sln
2019-05-12 21:51 8,943 batchscript_starter.vcxproj
2019-05-12 21:51 1,664 batchscript_starter.vcxproj.filters
2019-05-13 03:38 1,736 batchscript_starter.vcxproj.user
2019-05-13 13:37 0 cmd.2019-05-13-13-37-28.log
2019-05-13 04:34 1,518 LICENSE
2019-05-13 13:32 22 python.2019-05-13-13-32-39.log
2019-05-13 04:55 82 README.md
2019-05-13 04:44 1,562 Resource.h
2018-04-10 01:08 46,227 small.ico
2019-05-13 04:44 630 targetver.h
2019-05-13 04:57 <DIR> x64
14 File(s) 134,378 bytes
3 Dir(s) ???,???,692,992 bytes free
Champ Target
:
C:\batchscript_starter.exe C:\WINDOWS\system32\cmd.exe /C C:\start_wiki.bat
Répertoire spécifié dans Start in
Le champ contiendra les fichiers de sortie.
exécutez-le sous un autre utilisateur. en supposant qu'il s'agisse d'une fenêtre, créez un compte utilisateur pour les tâches planifiées. lancez-le en tant qu'utilisateur. La commande Invite ne s'affiche que pour l'utilisateur actuellement connecté.
J'ai utilisé cela pour démarrer un fichier cmd à partir de C #:
Process proc = new Process();
proc.StartInfo.WorkingDirectory = "myWorkingDirectory";
proc.StartInfo.FileName = "myFileName.cmd";
proc.StartInfo.WindowStyle = ProcessWindowStyle.Hidden;
proc.Start();
proc.WaitForExit();