Es könnte sein, dass der Prozess bereits beendet, wenn Sie versuchen, den Ausgang (Gebühren zu Ihrem „exit“ Befehl) zu lesen. Versuchen Sie die unten leicht modifizierte Version, wo ich Ihre while-Schleife nach dem "ls" -Befehl aber vor dem "exit" -Befehl bewegt habe.
Es sollte die Ausgabe von Ihrem "ls" Befehl gut lesen, aber leider wird es wahrscheinlich irgendwann hängen, da Sie EndOfStream nie auf dem StandardOutput erhalten werden. Wenn nichts mehr zu lesen ist, blockiert ReadLine, bis eine weitere Zeile gelesen werden kann.
Wenn Sie also nicht wissen, wie Sie die letzte Zeile der von Ihrem Befehl generierten Ausgabe erkennen und nach dem Lesen aus der Schleife ausbrechen können, müssen Sie möglicherweise einen separaten Thread zum Lesen oder zum Schreiben verwenden.
ProcessStartInfo startinfo = new ProcessStartInfo();
startinfo.FileName = @"f:\plink.exe";
startinfo.Arguments = "-ssh [email protected] -pw abc123";
Process process = new Process();
process.StartInfo = startinfo;
process.StartInfo.UseShellExecute = false;
process.StartInfo.RedirectStandardInput = true;
process.StartInfo.RedirectStandardOutput = true;
process.Start();
process.StandardInput.WriteLine("ls -ltr /opt/*.tmp");
while (!process.StandardOutput.EndOfStream)
{
string line = process.StandardOutput.ReadLine();
}
process.StandardInput.WriteLine("exit");
process.WaitForExit();
Console.ReadKey();