Lancer un .bat dans un process ?? [Résolu]

cs_chuckboy 64 Messages postés vendredi 16 septembre 2005Date d'inscription 31 mars 2009 Dernière intervention - 7 nov. 2005 à 20:30 - Dernière réponse : meech 209 Messages postés vendredi 11 avril 2003Date d'inscription 14 août 2007 Dernière intervention
- 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);
Afficher la suite 

5 réponses

Répondre au sujet
meech 209 Messages postés vendredi 11 avril 2003Date d'inscription 14 août 2007 Dernière intervention - 8 nov. 2005 à 15:27
+3
Utile
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.
Cette réponse vous a-t-elle aidé ?  
Commenter la réponse de meech
meech 209 Messages postés vendredi 11 avril 2003Date d'inscription 14 août 2007 Dernière intervention - 8 nov. 2005 à 00:50
0
Utile
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.
Commenter la réponse de meech
cs_chuckboy 64 Messages postés vendredi 16 septembre 2005Date d'inscription 31 mars 2009 Dernière intervention - 8 nov. 2005 à 15:01
0
Utile
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 ?
Commenter la réponse de cs_chuckboy
cs_chuckboy 64 Messages postés vendredi 16 septembre 2005Date d'inscription 31 mars 2009 Dernière intervention - 8 nov. 2005 à 15:50
0
Utile
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!
Commenter la réponse de cs_chuckboy
meech 209 Messages postés vendredi 11 avril 2003Date d'inscription 14 août 2007 Dernière intervention - 8 nov. 2005 à 17:54
0
Utile
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.
Commenter la réponse de meech

Vous n'êtes pas encore membre ?

inscrivez-vous, c'est gratuit et ça prend moins d'une minute !

Les membres obtiennent plus de réponses que les utilisateurs anonymes.

Le fait d'être membre vous permet d'avoir un suivi détaillé de vos demandes et codes sources.

Le fait d'être membre vous permet d'avoir des options supplémentaires.