Friday, 6 October 2017

Prozess Waitforexit C # Hängt


In Console Application, Windows 10, Visual Studio 2015. NET 4.6 Ich rufe einzelne Methode in Main namens TestProcess. Build-Modus Debug, wenn ich App ohne Debugging es druckt korrekten Text: Drücken Sie eine beliebige Taste, um fortzufahren. Wenn ich app mit debugging es wartet für 3 Sekunden vor dem Drucken Fehler falsch falsch false Dies ist nur Vereinfachung der realen Problem, ist dieser Code Rückgrat von einigen komplexen Code, der auch in Release ohne Debugging für md5sums. exe hängt, aber funktioniert für einige andere Programme. Coplex-Code hängt auch auf var ein proc. WaitForExit (Timeout) bis Timeout wie im beigefügten Beispiel. Auf der anderen Seite wird diese Vereinfachung in der Freigabe ohne Debugger funktionieren. Auch all diese Probleme begannen mit Windows 10, auf Windows 7 alles funktionierte gut. EDIT Cant verstehen, warum md5sums. exe Probleme verursachen würde, und wenn ich etwas anderes nasse. FileName Ping, Argumente localhost alles funktioniert wie erwartet. EDIT2 Mein komplexes Programm hörte auf, an Windows 10 zu arbeiten (Release - Run ohne Debugging), aber dieses Beispiel hängt auch unter Windows 7 (Debug - Run with debugging) gefragt am 17 Mai 16 um 13:21 Dieses Problem hat eine sehr einfache Lösung. Sie können es immer nur entdecken, wenn Sie eine aussagekräftige Fehlermeldung schreiben, eine, die dem Benutzer von Ihrem Programm einen guten Hinweis gibt, was genau schief gelaufen ist. Eine gute Faustregel ist nicht immer ein Timeout weniger als 10 Sekunden auf einem Arbeitsplatz PC, 20 Sekunden auf einem Server. Fügen Sie mehr hinzu, wenn es ein quotcomplexquot Programm ist. Ndash Hans Passant Mai 17 16 at 14:01 HansPassant Complex Programm hat Zeitüberschreitung in Tagen :) 20 Sek. Zeitüberschreitung hat das Verhalten für dieses Beispiel geändert, obwohl test. txt mit nur einer kurzen Textzeile und der Konsole. WriteLine (quotError: 39) Datei ist 39, 39 39quot) zurückgegebenError: 3939, 3939. a, b und c sind alle falsch, wenn es scheitert. Was wäre sinnvolle Fehlermeldung ndash watbywbarif Es gab 3 Fänge, um dies zu lösen: md5sums. exe in einigen Fällen pausiert die Ausführung nach beendet, wenn mit meinen Einstellungen gestartet: Drücken Sie ENTER, um zu beenden Dies kann beobachtet werden, wenn CreateNoWindow ist Auf false und stdout setzen, stderr umleitung entfernt. Dies kann durch die Verwendung von - e Schalter behoben werden: Beenden Sie sofort nicht Pause vor der Rückkehr. Dies wird alle Fälle beheben. Aber da habe ich nicht - ich hatte inkonsistentes Verhalten je nach Debugger und Windows-Version. Beim Laufen ohne Debugging wurde die Pause nicht ausgelöst, obwohl alle Einstellungen gleich waren und ENTER drücken, um zu beenden, wurde nicht ausgegeben. Aber das Ausführen mit Debugging verursacht Pause zu blockieren Programm bis Timeout, wo md5sums hängen in Task-Manager wartet auf Enter. Im Release-Modus laufen ohne Debugging, obwohl Pause gefeuert und drücken Sie ENTER, um zu beenden wurde in der Ausgabe auf Windows 7 md5sums zurückgegeben und Ausführung fortgesetzt, ohne zu blockieren und schlagen Timeout. Dies war nicht auf Windows 10, wo md5sums würde in Task-Krippe warten auf Enter und Programm weiter nach dem Schlagen Timeout leben. Antwortete am 18. Mai 16 um 11: 16Wie jetzt arbeite ich an einer Konsolenläufer-Anwendung, die den folgenden Code hat, um das Protokoll auszugeben und zu warten, bis der Prozess abgeschlossen ist: Ich habe zwei Fragen zu diesem Stück Code. Ich habe bemerkt, dass, wenn der Prozess dauert länger als 30 Sekunden, die Aufruf p. ExitCode Bomben. Was passiert, wenn mein Prozess dauert nur 1 Sekunde, wird es warten 30 Sekunden sowieso oder der Prozess wird von der CLR gefragt werden gefragt Februar 5 14 um 12:40 Sie verstecken diese Geheimnisse in der Dokumentation: "Wenn Sie versuchen, die ExitCode vor dem zu bekommen Prozess hat verlassen, der Versuch wirft eine Ausnahme aus. Überprüfen Sie zuerst die HasExited-Eigenschaft, um zu überprüfen, ob der zugehörige Prozess beendet wurde. Und "WaitForExit ". Und blockiert den aktuellen Thread der Ausführung, bis die Zeit abgelaufen ist oder der Prozess hat exitedquot ndash Alex K. Feb 5 14 um 12:44 Ich fand es auch, aber ich war nicht sicher, dass ich es richtig gelesen habe. So scheint es, dass wenn der Prozess vor dem Zeitstempel innerhalb der WaitForExit gibt es keine Probleme gibt, aber umgekehrt eine schöne Ausnahme verursacht. Danke ndash Raffaeu Feb 5 14 um 12:49

No comments:

Post a Comment