Waitforexit Prozess C # Beispiel Downloads


Elina: Danke für deine Antwort. Es gibt einige Notizen am unteren Rand dieses MSDN-Dokuments (msdn. microsoften-uslibraryhellip), die über potenzielle Deadlocks warnen, wenn Sie bis zum Ende der beiden umgeleiteten Stdout - und Stderr-Ströme synchron lesen. Es ist schwer zu sagen, ob Ihre Lösung anfällig für dieses Problem ist. Außerdem scheint es, dass du die process39 stdoutstderr Ausgabe direkt als Eingang sendest. Warum. ) Ndash Matthew Piatt Dies ist eine moderne, TPL-basierte Lösung (Task Parallel Library, TPL) basierte Lösung für 4.5 und höher. Antwort # 2 am: Juli 12, 2010, 07:10:13 am »Ich Sache, dass dies einfach und besser Ansatz (wir brauchen nicht AutoResetEvent): Antwort # 2 am: Mai 12, 2010, 10:49:13 pm» True, aber shouldn39t Sie tun. FileName Pfad quotggsci. exequot 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 du anstelle von Event-Event (wenn sie verfügbar sind), dann sind Sie mit CPU ohne Grund und das deuten darauf hin, dass Sie ein schlechter Programmierer sind. Ihre Lösung ist wirklich schlecht, wenn mit dem anderen mit AutoResetEvent verglichen. (Aber ich habe dir nicht gegeben, weil du versucht hast zu helfen). Ndash Eric Ouellet Ich war mit dem gleichen Problem, aber der Grund war anders. Es würde aber unter Windows 8 passieren, aber nicht unter Windows 7. Die folgende Zeile scheint das Problem verursacht zu haben. Die Lösung bestand darin, UseShellExecute NICHT zu deaktivieren. Ich habe jetzt ein Shell Popup-Fenster, das ist unerwünscht, aber viel besser als das Programm wartet auf nichts Besonderes passieren. So fügte ich das folgende Work-around hinzu: Jetzt das einzige, was mich stört, ist, warum dies geschieht unter Windows 8 an erster Stelle. Antwortete 13. Januar 15 um 10:35 Ich habe versucht, eine Klasse, die Ihr Problem mit asynchronen Stream zu lösen, zu lesen, indem Sie in Rechnung Mark Byers, Rob, stevejay Antworten zu machen. 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 umgeleitet oder der Prozess hat noch nicht begonnen. Dann müssen Sie die asynchrone Ausgabe starten, nachdem der Prozess gestartet wurde: So machen Sie eine Racebedingung, da der Ausgabestream Daten empfangen kann, bevor Sie ihn auf asynchron einstellen: Dann könnten einige Leute sagen, dass Sie nur den Stream vor Ihnen lesen müssen Setze es asynchron an. Aber das gleiche Problem tritt auf. Es wird eine Race-Bedingung zwischen dem synchronen Lesen und setzen den Stream in den asynchronen Modus. Es gibt keine Möglichkeit, das sichere asynchrone Lesen eines Ausgabestreams eines Prozesses in der eigentlichen Weise zu erledigen. Process und ProcessStartInfo wurden entworfen. Sie sind wahrscheinlich besser mit asynchronen lesen wie vorgeschlagen von anderen Benutzern für Ihren Fall. Aber Sie sollten sich bewusst sein, dass Sie einige Informationen aufgrund Rennbedingung verpassen könnten. Ich habe eine Situation, wo ich eine Datei ausführen möchte, und lösche dann die ausführbare Datei, wenn die Ausführung durchgeführt wird. Ich benutze System. Diagnostics. Process. Start (), um die Datei auszuführen, und verwenden Sie. WaitForExit (), um zu warten, bis der Prozess abgeschlossen ist. Ich verwende dann File. Delete (Dateiname), um die ausführbare Datei zu löschen. Das Problem ist, dass manchmal File. Delete mit dem folgenden Fehler fehlschlagen wird: Das führt mich zu glauben, dass irgendwie der Prozess noch am Leben ist und die ausführbare Datei auch dann beendet, wenn der. WaitForExit () - Aufruf zurückgegeben wird. Ich habe andere Threads auf dem Netz gefunden, die das gleiche Verhalten beschreiben, aber ich habe keine gefunden, die mit einer vernünftigen Erklärung oder Lösung für das Problem zu schließen, außer Anregungen der Platzierung eines Sleep (n) nach dem WaitForExit (). Beispiele: Hier ist ein Beispielprogramm, das das Problem für mich reproduziert. Ich habe auf Windows XP und Windows 7 getestet, und sie beide scheitern schließlich irgendwann mit dem gleichen Fehler. Beachten Sie auch, dass die ss. exe-ausführbare Datei eine einfache einfache Hello Worldquot-Konsolenanwendung ist. Und die Ausgabe sieht typischerweise so etwas aus (mit unterschiedlicher Anzahl von Iterationen vor dem Absturz): Irgendwelche Ideen, warum dies geschieht, und wenn es einige Fix für diese (außer Putting Schlaf in den Code) Freitag, 8. Januar 2010 3 : 40 PM Der Grund ist, dass, obwohl der Prozess abgeschlossen ist, kann es ein paar Millisekunden für das Betriebssystem bis zum Ende der Zerstörung dauern. Es ist ein Multitasking-Betriebssystem, nachdem alle, seine versucht, alle zur gleichen Zeit Service. Unglücklicherweise gibt es keine Möglichkeit, zu wissen, wann die Datei nicht mehr gesperrt ist (vorsätzlich). Wenn Sie WaitForExit haben, erstellen Sie ein Sperrobjekt auf dem Prozessobjekt. Das Prozessobjekt kann nicht zerstört werden, bis die Sperre freigegeben wird und Sie können nicht auf etwas warten, das nicht vorhanden ist (Huhn und Eiart von Ausgabe). Also die einzige vernünftige Sache, die Sie tun können, ist immer wieder versuchen, so etwas wie: Als Antwort von Samuel Stanojevic markiert Freitag, 8. Januar 2010 16:20 Bearbeitet von Tergiver Freitag, 8. Januar 2010 16:20 Uhr geändert auf bool, Endlosschleife Fix Freitag, 8. Januar 2010 16.15 Uhr Microsoft führt eine Online-Umfrage durch, um Ihre Meinung über die Msdn-Website zu verstehen. Wenn Sie sich für die Teilnahme entscheiden, wird Ihnen die Online-Umfrage präsentiert, wenn Sie die Msdn-Website verlassen. Möchten Sie teilnehmen

Comments

Popular Posts