Friday 21 July 2017

Waitforexit Prozess


Lets lesen, was MSDN darüber sagt: Die WaitForExit () () () Überlast wird verwendet, um den aktuellen Thread zu warten, bis der zugehörige Prozess beendet wird. Diese Methode weist die Prozesskomponente an, eine unendliche Zeit zu warten, bis der Prozess beendet wird. Dies kann dazu führen, dass eine Anwendung nicht mehr reagiert. Wenn Sie zum Beispiel CloseMainWindow für einen Prozess anrufen, der über eine Benutzeroberfläche verfügt, wird die Anforderung an das Betriebssystem, den zugehörigen Prozess zu beenden, möglicherweise nicht behandelt, wenn der Prozess geschrieben wird, um seine Nachrichtenschleife niemals einzugeben. Diese Überlastung stellt sicher, dass alle Bearbeitungen abgeschlossen sind, einschließlich der Handhabung von asynchronen Ereignissen für umgeleiteten Standardausgang. Sie sollten diese Überladung nach einem Aufruf der WaitForExit (Int32) Überlast verwenden, wenn die Standardausgabe an asynchrone Ereignishandler umgeleitet wurde. Das ist natürlich für Was macht Sie denken, dass es nicht warten, bis die Note Prozess zu beenden Was sind die Zeichen dafür, was ist der Beweis Freitag, 20. Februar 2009 8:13 PM Nicht sicher, ob dies hat sich vor kurzem geändert, aber wieder in den Tag Anwendungen auf Fenster Mobile nie wirklich geschlossen, wenn Sie die X schlagen, um sie zu schließen, würden sie nur minimieren und weiterlaufen im Hintergrund (das war kein Bug, es war ein Feature, seit dem nächsten Mal starten Sie die App würde es wirklich schnell gestartet werden, yah Ich weiß, wahnsinnig aber wahr), also könnte das sein, warum WaitForExit sich vielleicht seltsam verhält und auf App-Start statt Ausfahrt wartet. Aber dann wieder ist es nur Spekulation auf der Grundlage von Knowlegde von alten Versionen von Windows Mobile. Freitag, den 20. Februar 2009 um 11:03 Uhr Id mag diese Frage aufheben. Im auf Windows Mobile 6 Standard und ich versuche, eine Browser-Instanz zu erzeugen. Ich möchte warten, bis der Benutzer den Browser schließt. Aber WaitForExit kehrt extrem schnell zurück. Hier ist der Code: Prozess p neue Prozess () p. StartInfo. Argumente quotexample-sitequot p. StartInfo. Verb quotOpenquot p. StartInfo. UseShellExecute false p. StartInfo. FileName quotIExplore. exequot p. Start () p. WaitForExit () MessageBox. Show ("Nein, der Browser sollte geschlossen sein) Was sollte der richtige Weg sein, um die erwarteten Resuts zu bekommen Montag, 08. Juni 2009 10:45 Uhr Wo Symbol ist. Symbol. AlexB Dienstag, 09. Juni 2009 um 9:58 Uhr Im sehen das gleiche Problem, aber auf XP. Ich denke, der Beweis kann in jedem Debugger gesehen werden (wie ich sehe), oder in irgendeiner Konsolenanwendung (nicht unbedingt auf Mobile) Mittwoch, September 02, 2009 8:35 PM Außer, dass Sie nicht dann ein Prozessobjekt bekommen, das Sie können benutzen. Wenn Sie versuchen, Dim MyProc Als neuer Prozess () myProc Process. Start (quotiexplorequot, quotfinance. yahooqhpsquot Symbol) myProc. WaitForExit () Es kommt immer noch sofort zurück. Mittwoch, September 02, 2009 8:48 PM Problem ist, dass du keine neue Instanz von iexplore. exe startet. Sie erstellen einfach ein neues Fenster auf dem bestehenden Prozess. Meine Vermutung ist iexplore. exe beginnt, sieht eine vorherige Instanz und kommuniziert mit der vorherigen Instanz, so dass es das neue Fenster öffnet, und dann diese Instanz, die Sie begonnen Exits sofort. Also ist das Verhalten richtig und zu erwarten. Blog. voidnish Mittwoch, September 02, 2009 8:52 PM Microsoft führt eine Online-Umfrage durch, um Ihre Meinung über die Msdn-Website zu verstehen. Wenn Sie sich für eine Teilnahme entscheiden, wird Ihnen die Online-Umfrage vorgestellt, wenn Sie die Msdn-Website verlassen. Möchten Sie teilnehmenElina: Danke für Ihre 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 Sep 26 16 at 4:42 Dies ist eine modernere, aufwartende, Task Parallel Library (TPL) basierte Lösung für 4.5 und höher. Usage Beispiel Implementierung beantwortet 5. Oktober 16 um 10:54 Ich Ding, dass dies ist einfach und besser Ansatz (wir brauchen nicht AutoResetEvent) Antwort # 2 am: Mai 18, 2010, 07:13:13 am »True, aber shouldn39t Sie tun. FileName Pfad quotggsci. exequot quot lt Obeycommand. txtquot, um Ihren Code zu vereinfachen oder vielleicht etwas gleichbedeutend mit quotecho Befehl path quotggsci. exequot wenn Sie wirklich don39t wollen eine separate obeycommand. txt Datei verwenden. Ndash Amit Naidu Jun 3 13 at 22:03 Deine Lösung braucht nicht AutoResetEvent, aber du zählst. 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 Nov 7 14 at 18:38 Ich hatte das gleiche 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. So erkannte ich, dass es einen Fehler gibt, der mit dem asynchronen Prozessausgangsstrom verknüpft ist. Du kannst das nicht tun: Du erhältst 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 keinen Weg, um sicheres asynchrones Lesen eines Ausgabestreams eines Prozesses in der tatsächlichen Weise zu bewirken, dass Process und ProcessStartInfo entworfen wurden. Sie sind wahrscheinlich besser mit asynchronen lesen wie vorgeschlagen von anderen Benutzern für Ihren Fall. Aber Sie sollten sich bewusst sein, dass Sie aufgrund der Rennbedingung einige Informationen verpassen könnten.

No comments:

Post a Comment