ShellExecute ou "system(. . .)" ?
Bonjour
J'ai un exécutable "console" qui s'appelle "Test.exe" et qui prend en paramètre un fichier d'entrée et un fichier de sortie. "Test C:\tmp\toto.bmp C:\tmp\toto.gif" par exemple.
L'exécutable Test.exe a des instructions "cout" ou "printf" pour indiquer l'avancement de son traitement.
Et donc si j'exécute en ligne de commande : "Test C:\tmp\toto.bmp C:\tmp\toto.gif > Log.txt", je récupère toutes les sorties "std::cout << " dans le fichier Log.txt.
Je voudrais exécuter "Test C:\tmp\toto.bmp C:\tmp\toto.gif > Log.txt" à partir d'un programme Win32.
1) J'ai essayé la commande
Code:
int nRetour = system("\"C:\\dev\\essai\\Test.exe\" C:\\tmp\\toto.bmp C:\\tmp\\toto.gif > Log.txt");
Et ça fonctionne, sauf que :
- une grosse fenêtre noire s'ouvre, alors que je ne voudrais pas la voir
- pour les parametres 1 et 2 (toto.bmp et toto.gif), j'ai une erreur si je les encadre par des guillemets et si je ne met pas de guillements et que j'ai un espace dans un chemin, Test.exe voit 3 parametres au lieu de 2
2) J'ai essayé la fonction ShellExecute de l'API Win32
Code:
1 2 3 4 5 6 7 8
|
HINSTANCE hRetour;
hRetour = ShellExecute(this->Handle,
"open",
strExe.c_str(),
strParametres.c_str(),
ExtractFilePath(ParamStr(0)).c_str(),
SW_SHOW); |
La commande fonctionne très bien, si je met SW_HIDE à la place de SW_SHOW, je ne vois pas la fenêtre noire, mais...
... si je met "a b > out.txt" dans strParametres, le programme "Test.exe" n'interprète pas le ">" comme une redirection et passe 4 paramètres à l'exécutable ("a", "b", ">" et "out.txt") ...
Vous auriez une idée pour faire un "mix" de ces deux commandes ?
C'est à dire pouvoir utiliser le redirecteur ">" et en même temps ne plus voir la fenêtre dos noire à l'exécution ?
_popen ne fonctionne pas pour les programmes fenêtrés
Bon, voilà, j'ai trouvé ma réponse sur le site de Microsoft :
C'est normal que _popen ne fonctionne pas dans mon cas...
Citation:
Envoyé par Microsoft
If used in a Windows program, the _popen function returns an invalid file pointer that causes the program to stop responding indefinitely. _popen works properly in a console application. To create a Windows application that redirects input and output, see Creating a Child Process with Redirected Input and Output in the Platform SDK.
Pour avoir plus d'informations sur le sujet, cliquez ici :
http://msdn2.microsoft.com/en-us/lib...4b(VS.80).aspx