J'utilise le code suivantRedirect gros du processus enfant avec .net
System::Diagnostics::Process^ p = gcnew System::Diagnostics::Process();
p->StartInfo->FileName = "tnccmd.exe";
p->StartInfo->UseShellExecute = false;
p->StartInfo->RedirectStandardInput = true;
p->StartInfo->RedirectStandardOutput = true;
p->Start();
System::IO::StreamWriter^ tnc_stdin = p->StandardInput;
System::IO::StreamReader^ tnc_stdout = p->StandardOutput;
tnc_stdin->WriteLine("connect i 127.0.0.1");
String^ prg_output = tnc_stdout->ReadToEnd();
Mon problème est que je ne peux pas lire stdout
correctement. Je peux facilement écrire à stdin
cependant, mais maintenant j'essaye d'implémenter un certain code de vérification d'erreur et cela ne fonctionne pas.
Le programme que j'utilise ne semble pas écrire en stdout
même s'il est exécuté en ligne de commande. Je peux reproduire le bug
avec ftp.exe
qui vient avec Windows XP
par défaut. Si vous modifiez le ->FileName
avec ftp.exe
l'invite de commande ftp.exe
donne généralement ftp>
n'apparaîtra pas dans prg_output
.
Maintenant, je sais que l'invite doit utiliser une sorte de windows shell curses
et je peux mélanger des problèmes.
Normalement juste après l'instruction connect i 127.0.0.1
je suis censé recevoir connecting to 127.0.0.1...
mais je ne reçois rien.
Un indice sur ce que je fais mal? Y a-t-il un autre type de stdout
que je ne connais pas?
EDIT
Je ne peux pas utiliser des arguments parce que j'ai plusieurs lignes à écrire, un peu comme avec ftp.exe
. En outre, ftp.exe
est généré lorsque vous tapez des commandes telles que dir. Au moins, il sort lorsque vous écrivez des commandes inconnues, il se plaint de Invalid command
.
Merci pour votre réponse. Cependant StreamWriter fonctionne, le problème survient avec StreamReader – Eric