Bonjour.
J'ai un problème concernant l'utilisation de cmd.exe dans un ShellExecute.
.
La première exécution est correcte. Mais la seconde produit une erreur :
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9 AnsiString A = "/c dir > c:\\se4.txt "; ShellExecute( Application->Handle, "open", "c:\\WINNT\\SYSTEM32\\cmd.exe", A.c_str(), "c:\\", SW_SHOW); Memo1->Lines->LoadFromFile("c:\\se4.txt"); DeleteFile("c:\\se4.txt");Comme si la seconde exécution n'avait pas le temps de créer le second fichier de résultat. Si on attend un temps assez long et par exemple en préparant une autre commande dans la variable A, on finit par avoir le fichier de réponse du ShellExecute précédent."Impossible d'ouvrir le fichier c:\se4.txt".
J'ai donc tenté de détecter l'arrivée du fichier de résultat après le ShellExecute :Mais, je me suis rendu compte que la suite plantait pareil parce que cmd crée d'abord un fichier de taille nulle qui existe et est détecté par FileExists() !...
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3 // attendre que le fichier existe do { } while (!(FileExists("c:\\se4.txt")));
J'ai donc complété par :.
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4 // Attendre que le fichier soit "plein" do { handle = open("c:\\se4.txt", O_TEXT); } while (filelength(handle) == 0);
Le plantage se produit identiquement.
Qui aurait une idée ?
Y a t'il un problème avec le flag '/c' dans l'argument après cmd ?
Partager