begin process at 2010 03 14 22:40:29
  Trouver un code source :
 
dans
 
Accueil > Forum > 

Archive C/C++

 > 

Archives

 > 

Au secours

 > 

Exécuter une commande DOS avec arguments


Derniers messages déposésPoser une question dans le forum ou lancer une discussion

Exécuter une commande DOS avec arguments

mercredi 24 novembre 2004 à 15:14:57 | Exécuter une commande DOS avec arguments

nbouard

Bonjour,
Je développe actuellement une application sous Visual C++, et j'aimerais lancer une commande MS-DOS de ce type :
"C:\pv.exe -perf -localhost -wave "E:\ex_grammaire" -option sigFormat=PCM16,externalVAD=true,asrServersListenPort=32001 "E:\ex_grammaire\Document1.spk" > C:\toto".
Il n'y a pas de problème avec la commande system( ), mais celle-ci fait apparaître une fenêtre MS-DOS par dessus mon interface graphique, ce que je souhaîterais éviter.
Donc si quelqu'un sait comment ne pas faire apparaître cette fenêtre, ou bien connaît un autre moyen d'exécuter ma commande, je suis preneur...
Merci d'avance!
mercredi 24 novembre 2004 à 15:47:17 | Re : Exécuter une commande DOS avec arguments

yserver

ShellExecute devrait te permetre de faire ce que tu souhaite
ca donnerait :
ShellExecute ( NULL , "open" , "C:\\pv.exe" , "-perf -localhost -wave \"E:\\ex_grammaire\" -option sigFormat=PCM16,externalVAD=true,asrServersListenPort=32001 \"E:\\ex_grammaire\\Document1.spk\" > C:\\toto" , NULL , SW_HIDE );

Voila la syntaxe (plus d'info sur msdn)

HINSTANCE ShellExecute(

HWND hwnd, // handle to parent window
LPCTSTR lpOperation, // pointer to string that specifies operation to perform
LPCTSTR lpFile, // pointer to filename or folder name string
LPCTSTR lpParameters, // pointer to string that specifies executable-file parameters
LPCTSTR lpDirectory, // pointer to string that specifies default directory
INT nShowCmd // whether file is shown when opened
);
mercredi 24 novembre 2004 à 15:55:47 | Re : Exécuter une commande DOS avec arguments

nbouard

Merci, mais j'avais déjà essayé, et mes options ne sont pas prises en compte par ShellExecute : en fait c'est comme s'il faisait seulement C:\pv.exe...
Une autre solution peut-être?
mercredi 24 novembre 2004 à 16:21:34 | Re : Exécuter une commande DOS avec arguments

ymca2003

il y a aussi CreateProcess :

[ Lien ]
mercredi 24 novembre 2004 à 16:48:29 | Re : Exécuter une commande DOS avec arguments

nbouard

Encore merci, mais j'ai le même problème avec CreateProcess, j'exécute le code suivant :

SECURITY_ATTRIBUTES sa;
STARTUPINFO StartupInfo;
PROCESS_INFORMATION ProcessInfo;

sa.nLength = sizeof(SECURITY_ATTRIBUTES);
sa.lpSecurityDescriptor = NULL;
sa.bInheritHandle = TRUE;

ZeroMemory(&StartupInfo, sizeof(STARTUPINFO));

StartupInfo.cb = sizeof(STARTUPINFO);
StartupInfo.dwFlags = STARTF_USESTDHANDLES;
StartupInfo.wShowWindow = SW_HIDE;
StartupInfo.hStdOutput = NULL;

CreateProcess(NULL,"C:\\pv.exe -perf -localhost -wave \"C:\\ex_grammaire\" -option sigFormat=PCM16,externalVAD=true,asrServersListenPort=32001 \"C:\\ex_grammaire\\Document1.spk\" > C:\\toto",&sa,NULL,TRUE,DETACHED_PROCESS,NULL,NULL,&StartupInfo, &ProcessInfo);


Mes arguments sont ignorés et toto reste vide !!!
Là je sais vraiment plus quoi faire?...
mercredi 24 novembre 2004 à 18:03:49 | Re : Exécuter une commande DOS avec arguments

Bebert37

moi j'voterai pour un p'tit execve ou execv (c'est compatible PosiX)de derrière les fagots ... mais bon apres c'est comme tu veux.
voila une p'tite doc qui va avec:
http://www.epita.fr/docs/man2/execve.2.html
ou encore
http://mkssoftware.com/docs/man3/execl.3.asp

bon courage
voila...




Ce sont les tonneaux vides et les hommes pleins qui font le plus de bruit

mercredi 24 novembre 2004 à 18:07:17 | Re : Exécuter une commande DOS avec arguments

ymca2003

Pour rediriger la sortie standard, il faut mettre un handle du fichier "C:\\toto" pour StartupInfo.hStdOutput.
vendredi 26 novembre 2004 à 16:11:18 | Re : Exécuter une commande DOS avec arguments

nbouard

Merci à tous. J'ai finalement réussi avec Create Process. Désol pour le temps de réponse mais je ne bosse pas tous les jours sur ce projet... Pour ceux que ça intéresse, voici ma solution:
char *commande =
"E:\\pv.exe -perf -localhost "
"-wave \"E:\\ex_grammaire\"
"-option SigFormat=PCM16,externalVAD=true,asrServersListenPort=32001 "\"E:\\ex_grammaire\\Document1.spk\"";

char *resultat = "E:\\toto";

char buffer[200];
BOOL statut;
STARTUPINFO startupinfo;
PROCESS_INFORMATION pi;
SECURITY_ATTRIBUTES sa;

memset(&startupinfo,0,sizeof startupinfo);
memset(&pi,0,sizeof pi);

MessageBox(NULL,commande,"message",MB_OK);

startupinfo.cb = sizeof(startupinfo);
startupinfo.dwFlags = STARTF_USESTDHANDLES|STARTF_USESHOWWINDOW;
startupinfo.wShowWindow = SW_HIDE;
startupinfo.hStdInput = GetStdHandle(STD_INPUT_HANDLE);
startupinfo.hStdError = GetStdHandle(STD_ERROR_HANDLE);
sa.nLength = sizeof sa;
sa.lpSecurityDescriptor = NULL;
sa.bInheritHandle = TRUE;
startupinfo.hStdOutput = CreateFile(
resultat,
GENERIC_WRITE,
FILE_SHARE_WRITE,
&sa,
CREATE_ALWAYS,
FILE_ATTRIBUTE_NORMAL,
NULL);

if (startupinfo.hStdOutput==INVALID_HANDLE_VALUE){
MessageBox(NULL,"echec CreateFile","message",MB_OK);;
return;
}

statut = CreateProcess(
NULL,commande,
NULL,NULL,
TRUE,0,
NULL,NULL,
&startupinfo,&pi);

if (statut==FALSE){
MessageBox(NULL,"echec CreateProcess","message",MB_OK);;
CloseHandle(startupinfo.hStdOutput);
return;
}

bool stop = false;
while(!stop) {
DWORD waitstatut = WaitForSingleObject(pi.hProcess,INFINITE);
if (waitstatut == WAIT_OBJECT_0){
DWORD exitcode;
statut = GetExitCodeProcess(pi.hProcess,&exitcode);
if (statut!=FALSE) {
if (exitcode != STILL_ACTIVE){
sprintf(buffer,"exit code = %d",exitcode);
MessageBox(NULL,buffer,"message",MB_OK);;
stop = true;
}
}
}
else {
sprintf(buffer,"signal = %08X",waitstatut);
MessageBox(NULL,buffer,"message",MB_OK);;
stop = true;
}

}
CloseHandle(pi.hProcess);
CloseHandle(pi.hThread);
CloseHandle(startupinfo.hStdOutput);


Cette discussion est classée dans : ms, commande, exécuter, dos, arguments


Répondre à ce message

Sujets en rapport avec ce message

Comment ecrire une commande sous MS-DOS [ par salley ] Voila, j'aimerais que mon programme ecrive la ligne suivante dans le "command prompt" (sous MS-DOS) automatiquement. scheduler report.txt <br Exécuter cmd DOS [ par ro0tsman ] Bonjour tt l'monde,voilà mon problème : je souhaite exécuter une commande DOS donc ca c'est bon c'est pas un problème mais cette commande est du type [C] Pause [ par zaert ] Salut tout le monde ! Je vien de debuter le C avant hier soir et j'aimerais savoir comment utiliser la commande system("pause"); en C pour eviter que masquez la fenetre de commande ms-dos [ par debjo ] bonsoir, j'ai créé un programme en c++, et j'effectue une commande "ping" et je voudrais savoir si il est possible de masquer la fenêtre de commande appeler à une ligne commande dos [ par boualiasma ] Bonjour, Dans mon programme C, je voulais appeler un autre programme X qui est exécuté par une ligne commande dos. Donc, comment je vais appeler à un Commande DOS sous windows [ par magicientarik ] Salut, Svp si qlq un peux m'aider, Je veux utiliser un ensemble des commande DOS sur une application C++ sous windows, le workspace du projet est sur Dll pilotant l'activeX de VLC [ par rem_s27 ] Bonjour à tous,je cherche à dévelloper une dll permettant de piloté l'activeX axvlc.dll de VLC. Je développe sous VSC++ 6. En gros ce que je voudrais Probleme d'execution de commande dos [ par Mowti ] Bonjour, Lorsque que j'exécute : [code=c]system("fsutil file createnew c:\test\test.txt 1048576");[/code] Le programme m'écrit "Utilisation : .... Pa comment marche dos? [ par sizixe ] Bonjour, j'aimerais savoir comment dos fonctionne ? par ex : quand je tape une commande ? je sais que c'est du genre : if (conditions) { instructions svp c urgent aidez moi [ par sendouda ] je veux exécuter une commande dos en MFC qui est stockée dans une variable CString et je ne veux pas qu'elle m'ouvre au moment de l'exécution une fenê


Nos sponsors


Appels d'offres

Sondage...

CalendriCode

Mars 2010
LMMJVSD
1234567
891011121314
15161718192021
22232425262728
293031    

Consulter la suite du CalendriCode

Photothèque

 
Développement réalisé par Nicolas SOREL (Nix) avec l'aide de : Cyril DURAND et Emmanuel (EBArtSoft), Merci à Vincent pour ses précieux conseils.
CodeS-SourceS.com© Toute reproduction même partielle est interdite sauf accord écrit du Webmaster
CodeS-SourceS.com© est une marque déposée tous droits réservés

Google Coop CodeS-SourceS Google Coop CodeS-SourceS
Temps d'éxécution de la page : 0,328 sec (3)

Nous contacter | Annoncer sur CodeS-SourceS | Mentions légales