Thursday 9 March 2017

C # Process Beginoutputreadline Waitforexit

Elina: Danke für deine Antwort. Es gibt einige Notizen am unteren Rand dieses MSDN-Dokuments (msdn. microsoften-uslibraryhellip), die vor potenziellen Deadlocks warnen, wenn Sie das Ende der beiden umgeleiteten Stdout - und Stderr-Streams synchron lesen. Es ist schwer zu sagen, ob Ihre Lösung anfällig für dieses Problem ist. Auch scheint es, dass Sie die process39 stdoutstderr Ausgabe rechts zurück als Eingang senden. Warum. ) Ndash Matthew Piatt Dies ist eine moderne, aufwändige, Task Parallel Library (TPL) basierte Lösung für 4.5 und höher. Verwendungsbeispiel Implementierung beantwortet 5. Oktober 16 um 10:54 I Sache, dass dies einfach und besserer Ansatz (wir brauchen nicht Autoreset): beantwortet 14. Juni 12 um 14:29 Uhr Das stimmt, aber shouldn39t Sie. FileName Pfad tun quotggsci. exequot quot lt Obeycommand. txtquot, um Ihren Code zu zu vereinfachen Oder vielleicht etwas gleichbedeutend mit quotecho Befehl quotieren Pfad quotggsci. exequot, wenn Sie wirklich don39t eine separate obeycommand. txt-Datei verwenden möchten. Ndash Amit Naidu Ihre Lösung braucht nicht AutoResetEvent aber Sie Umfrage. Wenn Sie die Umfrage statt der Verwendung von Event (wenn sie verfügbar sind), dann sind Sie mit CPU ohne Grund und dass zeigen, dass Sie ein schlechter Programmierer sind. Ihre Lösung ist wirklich schlecht, wenn die anderen mit AutoResetEvent verglichen werden. (Aber ich habe dir nicht gegeben -1, weil du versucht hast zu helfen). Ndash Eric Ouellet 7. November um 18:38 Ich hatte das gleiche Problem, aber der Grund war anders. Es würde jedoch unter Windows 8, aber nicht unter Windows 7 auftreten. Die folgende Zeile scheint das Problem verursacht haben. Die Lösung war NICHT deaktivieren UseShellExecute. Ich erhielt nun ein Shell-Popup-Fenster, das unerwünscht ist, aber viel besser als das Programm wartet auf nichts Besonderes passieren. So fügte ich die folgende Arbeit-um für das hinzu: Jetzt das einzige, das mich stört, ist, warum dieses geschieht unter Windows 8 an erster Stelle. Ich habe versucht, eine Klasse, die Ihr Problem mit asynchronen Stream zu lösen, indem Sie in Konto Mark Byers, Rob, stevejay Antworten lösen würde. Dabei erkannte ich, dass es einen Fehler im Zusammenhang mit asynchrone Prozess-Ausgabe-Stream zu lesen. Sie können das nicht tun: Sie erhalten System. InvalidOperationException. StandardOut wurde nicht weitergeleitet oder der Prozess hat noch nicht begonnen. Dann müssen Sie die asynchrone Ausgabe starten, die nach dem Start des Prozesses gelesen wird. Machen Sie also eine Racebedingung, da der Ausgabestream Daten empfangen kann, bevor Sie ihn auf asynchron setzen. Dann könnten einige Leute sagen, dass Sie nur den Stream vor Ihnen lesen müssen Setzen Sie es auf asynchron. Aber das gleiche Problem tritt auf. Es wird eine Racebedingung zwischen dem synchronen Lesen und dem Setzen des Streams in den asynchronen Modus geben. Es gibt keine Möglichkeit, das sichere asynchrone Lesen eines Ausgabestreams eines Prozesses in der tatsächlichen Weise zu erledigen. Process und ProcessStartInfo wurde entworfen. Sie sind wahrscheinlich besser mit asynchronen Lesen wie von anderen Benutzern für Ihren Fall vorgeschlagen. Aber Sie sollten sich bewusst sein, dass Sie einige Informationen aufgrund der Race Condition. Im Login auf Remote-Linux-Maschine mit Hilfe von Kitt verpassen könnte. Process pInfo new Process () pInfo. Arguments quot-ssh prateek10.202.167.34 - pw passwordquot pInfo. FileName quotC: UsersprateekDesktopPUTTY. EXEquot Prozess p neue Process () p. StartInfo pInfo Nach dieser Kitt Sitzung starten, dann muss ich melden Sie sich als SuperUser (webAdmin) und geben Passwort. Wie kann ich sowohl UserName als auch Passwort in pInfo. Arguments nach Login als prateek (userName) bereitstellen oder ändern. Montag, 01. Oktober 2012 13.18 Uhr Hallo, Sie müssen die StandardInput und StandardOutput Ströme zu verwenden, um zu lesen und auf den Prozess Inhalt schreiben: Hoffe, das hilft, als Antwort Vorgeschlagen von Jason Dot Wang Microsoft Kontingent Personal Mittwoch, den 03. Oktober 2012 5:55 AM Als Antwort markiert von Jason Dot Wang Microsoft Kontingent Mitarbeiter Mittwoch, 10. Oktober 2012 01.25 Uhr Hallo, als ein Beispiel, wie man mit inputoutputerror in Konsolen-Anwendungen interagieren können Sie Verwenden Sie den folgenden Code: Hoffe, dies hilft Ihnen und wenn Sie immer noch Zweifel lassen Sie mich wissen. Als Antwort von PrateekThakur Mittwoch, 3. Oktober 2012 05.25 Uhr Dienstag, 2. Oktober 2012 12.52 Alle Antworten Hallo, Du musst die StandardInput und StandardOutput Ströme zu verwenden, um lesen und schreiben Inhalt auf den Prozess: Hoffe, das hilft , Vorgeschlagen als Antwort von Jason Dot Wang Microsoft Kontingent Mitarbeiter Mittwoch, 3. Oktober 2012 05.55 Uhr Markiert als Antwort von Jason Dot Wang Microsoft Kontingent Mitarbeiter Montag, den 01. Oktober 2012 um 1:25 Uhr PM Ein Problem ist, dass, wenn ich Passwort in separaten Zeile geben, ist es nicht akzeptieren, es ist immer noch für das Passwort in der Konsole fordert. Prozess p neue Process () p. StartInfo pInfo p. StartInfo. UseShellExecute falsch p. StartInfo. RedirectStandardInput wahr Stream myStreamWriter p. StandardInput myStreamWriter. WriteLine (quotsudo su - webadminquot) myStreamWriter. WriteLine (quotpasswordquot) Auf welche Weise wir Kennwort angeben können StandardIn Dank für Ihre Hilfe. Hallo, zuerst können Sie den StandardOutput lesen, um den Text quotPassword: quot zu erhalten, dann wissen Sie, dass die Anwendung bereit ist, das Kennwort zu lesen. Verwenden Sie danach das StandardInput, um das Kennwort zu schreiben. Montag, 01. Oktober 2012 14.27 Das Problem ist, wenn ich RedirectStandardOutput auf true gesetzt, tut es, den Prozess bis Ende auszuführen, ist es zwischen wie zum Beispiel in: pInfo. Arguments quot-ssh prateek10.202.104.20 - pw passwordquot pInfo. FileName quotC: UsersprateekDesktopPLINK. EXEquot Prozess p new Process () p. StartInfo pInfo p. StartInfo. UseShellExecute false p. StartInfo. RedirectStandardInput true p. StandardInput. WriteLine (quotsudo su - webadminquot) Aber wenn RedirectStandardOutput auf true, dh pInfo. Arguments Ssh prateek10.202.104.20 - pw passwordquot pInfo. FileName quotC: UserprateekDesktopPLINK. EXEquot Prozess p new Prozess () p. StartInfo pInfo p. StartInfo. UseShellExecute false p. StartInfo. RedirectStandardInput true p. StandardInput. WriteLine (quotsudo su - Webadminquot) Das wartet auf unbestimmte Zeit. Also, wie bekomme ich quotPassword: quot Text, wenn dieser Prozess ist in der Zwischenzeit für unbestimmte Zeit


No comments:

Post a Comment