ZMJUVENTINO
Messages postés41Date d'inscriptionvendredi 31 mars 2006StatutMembreDernière intervention11 mai 2009
-
12 mars 2009 à 12:58
ZMJUVENTINO
Messages postés41Date d'inscriptionvendredi 31 mars 2006StatutMembreDernière intervention11 mai 2009
-
16 mars 2009 à 04:06
Salut,
Je cherche comment lancer un processus d'invite de commande et y exécuter plusieurs commandes pas nécessairement
consécutives et sans utiliser des fichier batch comme si je travaille directement sur l'invite de commande.
Merci
foza juve
cs_rt15
Messages postés3874Date d'inscriptionmardi 8 mars 2005StatutModérateurDernière intervention 7 novembre 201413 12 mars 2009 à 20:30
Aaaaaaaah. Ces temps ci je comprends tout de travers. Cela dit, mon lien te donnais une piste pour une solution. Voilà ce que ça me donnerait (A compiler en MBCS, mais pas trop de boulot pour convertir en unicode).
uaip
Messages postés1466Date d'inscriptionmardi 20 février 2007StatutMembreDernière intervention 7 février 2011 13 mars 2009 à 00:09
Salut,
google + "WaitForSingleObject" = 1er lien Ca doit avoir le même effet que waitpid(); sous UNIX.
Sinon, pour répondre à ta question 3), euh... en remplaçant le main() par un nom de fonction quelconque, en incluant ce fichier (disons .cpp) dans ton projet et en appelant ladite fonction dans ton autre main, ça ne fonctionne pas ?
cs_rt15
Messages postés3874Date d'inscriptionmardi 8 mars 2005StatutModérateurDernière intervention 7 novembre 201413 13 mars 2009 à 11:26
1- Toutes les fonctions de Windows traitant des chaînes sont en deux versions, une travaillant sur des chaînes MBCS, l'autre sur des chaînes unicode. Un chaîne unicode doit être préfixée par L pour êter considérée comme unicode. Dans les fait on utilise _T() ou autre pour que le code compile en unicode ou MBCS. Je ne sais pas comment tu compiles, mais par défaut sous VC2005, c'est le jeu de caractère unicode qui est utilisé. Et il se trouve que mon programme ne fonctionne pas en unicode car WriteFile traite des données, pas une chaîne. Donc elle n'a pas de version unicode. Et moi je lui donne du unicode à écrire dans une console. Ca ne peut pas marcher.
Plus d'infos ici :
http://msdn.microsoft.com/en-us/library/c426s321(VS.80).aspx
3- Entre ce code et le code de mon lien du premier post, il y a l'écriture dans le flux d'entrée et la lecture du flux de sortie (Avec écriture dans une autre fenêtre). Donc il me semble que tu as tous les éléments pour faire tout et n'importe quoi.
ZMJUVENTINO
Messages postés41Date d'inscriptionvendredi 31 mars 2006StatutMembreDernière intervention11 mai 2009 12 mars 2009 à 15:36
Merci mais cela ne répond pas à mon besoin, moi je veux ouvrir une application qui marche sur l'invite des commandes ensuite appeler les fonctions de cette application.
Par exemple l'application s'appelle "app" quand je lance le processus ça me donne
app>
pour accèder à l'aide
app>help
pour sortir
app>exit
c'est cela que je veux exécuter des commandes consécutives sur le même invite de commande.
ZMJUVENTINO
Messages postés41Date d'inscriptionvendredi 31 mars 2006StatutMembreDernière intervention11 mai 2009 12 mars 2009 à 22:10
Merci beaucoup cher rt15 c'est ça que je cherche
cela dit j'ai besoin de quelques explications:
1-C'est quoi le MBCS , à ce que j'ai compris il s'agit d'un type de codage mais qu'est ce qu'il a de particulier ?
2-Quel est le rôle WaitForSingleObject(processInfo.hProcess, INFINITE); ?
3-Comment faire pour éxécuter c'est commandes en temps réel par exemple à partir d'une autre fenêtre ?
ZMJUVENTINO
Messages postés41Date d'inscriptionvendredi 31 mars 2006StatutMembreDernière intervention11 mai 2009 14 mars 2009 à 23:23
S'il vous plait j'ai pas compris l'utilité de WaitForSingleObject(processInfo.hProcess, INFINITE);
Après la première exécution mon application se plante.
Merci
ZMJUVENTINO
Messages postés41Date d'inscriptionvendredi 31 mars 2006StatutMembreDernière intervention11 mai 2009 15 mars 2009 à 11:23
Mon problème c'est que je veux lancer plusieurs commandes à partir de ma fenêtre à chaque fois que l'utilisateur appui sur un bouton, ces commandes doivent être exécuter sur le même processus qui est lancé au démarrage de mon application et non pas créer un nouveau processus à chaque fois qu'on veut exécuter une commande, alors avec ce code le problème que ça n'exécute la commande que après la fermeture du handle du pipe, or quand je veux éxécuter une autre commande il me dit "identificateur invalide" vu que le pipe est fermé.
Y-a-t-il une méthode pour réouvrir le même handle ou existe-t-il une autre solution ?
Merci
cs_rt15
Messages postés3874Date d'inscriptionmardi 8 mars 2005StatutModérateurDernière intervention 7 novembre 201413 15 mars 2009 à 14:17
Si tu mets un MessageBox entre mes deux WriteFile, tu t'apercevras que la première command est traitée avant et la deuxième après que tu ais fermé la MessageBox.
if (! WriteFile(hPipeInputWrite, lpHelpCommand, lstrlenA(lpHelpCommand), &nNumberOfCharsWritten, NULL)) System_ShowLastError();
MessageBox(0, _T("Avant la fin"), _T("Ex"), MB_OK);
if (! WriteFile(hPipeInputWrite, lpQuitCommand, lstrlenA(lpQuitCommand), &nNumberOfCharsWritten, NULL)) System_ShowLastError();
D'autre part, le WaitForSingleObject permet d'attendre la fin du processus netsh (provoquée par l'envoie de quit\n) avant de fermer les pipes. Donc ce n'est pas du tout la fermeture des pipes qui provoque l'exécution des commandes.
Il doit y avoir un souci dans ton code, mais difficile pour nous de le deviner...