Lancer un .bat dans un process ??

Résolu
cs_chuckboy Messages postés 64 Date d'inscription vendredi 16 septembre 2005 Statut Membre Dernière intervention 31 mars 2009 - 7 nov. 2005 à 20:30
meech Messages postés 209 Date d'inscription vendredi 11 avril 2003 Statut Membre Dernière intervention 14 août 2007 - 8 nov. 2005 à 17:54
Bonjour

J'essait de lancer un .bat dans un process et je n'y arrive pas avec la fonction CreateProcess.

Quelqu'un pour m'aider svp ?

Voici ce que je tente de lancer (contenu de la string sExec)
%ANT_HOME%\bin\ant.bat -propertyfile %BUILD_HOME%\properties\properties.txt -Dbasedir="%BUILD_HOME%/
work/cmdLine_SGL" -Dbuild.compiler="msdev" -Dbuild.sgl.config="win32 release" -Dst.sgl.view="sgl 1.1
3 prvtest" -Dst.sgl.label="SGL13" -Dbuild.sgl.output.dir=c:\att_temp\TESTUNIT1\Build1 -f %BUILD_HOME
%\scripts\sgl.xml build

CreateProcess(NULL, (LPTSTR)sExec.c_str(), NULL, NULL, TRUE, 0,NULL,NULL, &_SI, &_PI);

5 réponses

meech Messages postés 209 Date d'inscription vendredi 11 avril 2003 Statut Membre Dernière intervention 14 août 2007
8 nov. 2005 à 15:27
Bonjour,



Voilà, j'ai fait des tests.



D'une part, avec un simple fichier nommé test.bat :

@echo off

echo canard

pause




D'autre part, avec un fichier *.c (aisément adaptable en C++) :

#include <windows.h>

#include <stdio.h>



int main(int argc, char** argv)

{

STARTUPINFO siStartupInfo;

PROCESS_INFORMATION piProcessInfo;



memset(&siStartupInfo, 0, sizeof(siStartupInfo));

memset(&piProcessInfo, 0, sizeof(piProcessInfo));

siStartupInfo.cb = sizeof(siStartupInfo);

if (CreateProcess(NULL,"cmd.exe /c
d:\\test.bat",NULL,NULL,TRUE,CREATE_NEW_CONSOLE,NULL,0,&siStartupInfo,&piProcessInfo)
FALSE)

{

fprintf(stderr, "Echec d'execution du processus.\n");

return(128);

}

return(0);

}



A priori, cela fonctionne.

Espérant t'avoir aidé un peu plus...



Ciao.
3
meech Messages postés 209 Date d'inscription vendredi 11 avril 2003 Statut Membre Dernière intervention 14 août 2007
8 nov. 2005 à 00:50
Salut,

Essaie avec un truc du genre :
CreateProcess("cmd.exe", "/start ant.bat", etc.

En fait, les fichiers *.bat ne sont pas tout à fait gérés comme les autres : ils ont besoin de l'intepréteur de commandes MS-DOS pour pouvoir s'exécuter.

A titre informatif, je n'ai pas vérifier mais, d'après mes souvenirs (j'ai été confronté à ce problème il y a quelques temps), la solution est de cet ordre-là...

En espérant t'avoir un peu aidé,
A plus tard.
0
cs_chuckboy Messages postés 64 Date d'inscription vendredi 16 septembre 2005 Statut Membre Dernière intervention 31 mars 2009 1
8 nov. 2005 à 15:01
Je n'y arrive toujours pas. La solution apporter par meech ne fonctionne vraiment pas. Quelqu'un a une autre idée ou des précision à apporter ?
0
cs_chuckboy Messages postés 64 Date d'inscription vendredi 16 septembre 2005 Statut Membre Dernière intervention 31 mars 2009 1
8 nov. 2005 à 15:50
Merci c'est exactement ce qui me manquait
cmd.exe /c d:\\test.bat

Merci du coup de main

Au fait , mon script me sort un code d'erreur. Pour l'obtenir dans le command line je dois faire un echo %ERRORLEVEL% , t'as une idée comment récuperer ca dans mon c ?

thks!
0

Vous n’avez pas trouvé la réponse que vous recherchez ?

Posez votre question
meech Messages postés 209 Date d'inscription vendredi 11 avril 2003 Statut Membre Dernière intervention 14 août 2007
8 nov. 2005 à 17:54
Re,



Je ne sais pas trop si cela va fonctionner, mais ERRORLEVEL est une variable d'environnement. En ANSI C, un simple char* spErrorLevel = getenv("ERRORLEVEL")
devrait retourner quelque chose (si spErrorLevel == NULL, alors la variable d'environnement n'existe pas).



Mais je crains que ce soit l'exécution du Java qui retourne ce code d'erreur et non le fichier de commande DOS...



A plus.
0
Rejoignez-nous