Sunday 19 March 2017

Waitforexit Process C # Beispiel

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 den Prozess39 stdoutstderr Ausgang rechts zurück als Eingang senden. 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 ist einfach und besser Ansatz (wir brauchen nicht AutoResetEvent): Antwort # 2 am: Mai 12, 2010, 10:12: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 Sie statt der Verwendung von Ereignis (wenn sie verfügbar sind) abstimmen, dann verwenden Sie CPU ohne Grund und dass Sie sind ein schlechter Programmierer. Ihre Lösung ist wirklich schlecht, wenn die anderen mit AutoResetEvent verglichen werden. (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 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 folgenden Work-around für das: Jetzt ist das einzige, was mich stört, warum dies geschieht unter Windows 8 an erster Stelle. Ich habe versucht, eine Klasse, die Ihr Problem mit Hilfe von 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. Danach müssen Sie die asynchrone Ausgabe starten, die nach dem Start des Prozesses gelesen wird. Führen Sie deshalb eine Racebedingung aus, 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 eigentlichen Weise zu erledigen. Process und ProcessStartInfo wurden 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 Rennen Bedingung verpassen könnte. Ich schreibe ein Programm, das eine unbekannte Anzahl von Prozessen in Folge mit myProcess. Start () und myProcess. WaitForExit () startet. Das Problem scheint zu sein, dass einige Prozesse andere Prozesse starten und dann beenden können, was dazu führt, dass mein Programm fortgesetzt wird, ohne dass der gestartete Prozess tatsächlich seine Aufgabe abgeschlossen hat. Gibt es eine Möglichkeit, diese quotsub-processesquot Vielen Dank im Voraus Edit: Nach einigen zusätzlichen Tests entdeckte ich, dass das gleiche Problem auftritt, wenn zum Beispiel starten Winword. exe. WaitForExit funktioniert einfach nicht mit einigen Anwendungen. Tom schrieb über das gleiche Problem in diesem Thread, aber er war zufrieden, wenn es auf einem anderen Computer funktioniert. Es scheint, dass ein quotWINWORD. EXEquot-Prozess bereits auf meinem Rechner läuft. Möglicherweise, weil ich Word als E-Mail-Editor (). Schließen Sie dies, bevor Sie mein Programm (das konfiguriert ist, um Wort zu starten und warten, bis es zu beenden) quotsolvesquot das Problem. Allerdings kann ich nicht davon ausgehen, dass winword nicht ausgeführt wird, wenn mein Programm gestartet wird. Donnerstag, 9. August 2007 um 08:01 Uhr Nope, theres nicht viel können Sie zuverlässig tun. Das Problem ist, durch die Zeit, die Sie WaitForExit aufrufen, kann die Anwendung bereits eine andere Anwendung gestartet haben und es gibt keine Möglichkeit zu sagen, ob diese Anwendung andere an diesem Punkt hervorgebracht hat. Es ist die Art von Process. Start. Sie werden nicht feststellen, dass WaitForExit wartet unbegrenzt, weil der Prozess ist gekommen und gegangen, bevor Sie es angerufen haben Sie Donnerstag, August 09, 2007 1:15 PM Nun, es macht einen neuen Prozess, seine nur so schnell kann es nicht angezeigt werden in Prozess Forscher. Alle Process. Start tut ist fragen Sie den Prozess zu starten theres nichts mehr, dass neue Prozess erforderlich ist. Wenn es nicht wollen, um im Gedächtnis, das ist seine Wahl. Theres nichts, das Sie dagegen tun können, leider. Einige Anwendungen starten immer einen neuen Prozess. Beim Öffnen einer Visual Studio-SLN-Datei werden beispielsweise immer zwei Prozesse gestartet. Theres eine kleine Anwendung, die den Typ der SLN-Datei überprüft und öffnet dann eine entsprechende Version von Visual Studio, da Sie nur eine Anwendung pro Erweiterung zuordnen können. Das andere Problem ist, dass einige Anwendungen mehrere Dokumente gleichzeitig verarbeiten können, dh sie verwenden in der Regel vorhandene Prozesse wieder. In solchen Fällen, wenn der Prozess wiederverwendet wird, weil ein Dokument bereits geöffnet wurde, bedeutet dies, dass das Dokument, das Sie mit Process. Start geöffnet haben, geschlossen werden kann, aber das Prozesshosting weiterhin ausgeführt wird (Wartung des ursprünglichen Dokuments), was bedeutet, dass Sie niemals können Wenn der Prozess, der beim Aufruf von Process. Start wiederverwendet wurde, mit dem Dokument durchgeführt wurde, das mit Process. Start geöffnet wurde. Wenn youre, das schaut, um irgendeine Art von WinWord Lösung zu integrieren, würde ich vorschlagen, dass Automatisierung. Siehe msdn. microsoftnewsgroupsdefault. aspxdgmicrosoft. public. officedevamplangenampcrUS für Diskussionen über die Automatisierung von Office-Produkten. Sie müssten zu verfolgen, wie viele Prozesse wurden gestartet und verwenden Sie diese in Ihrer Logik zu halten. Sie können auch die WaitForMultipleObjects verwenden, wenn Sie im Voraus wissen, wie viele Prozesse gestartet werden. Wenn ein Prozess startet, sperrt der Prozess ein Objekt und erhöht den Zähler. Wenn der Vorgang beendet ist, sperrt er das Objekt und dekrementiert den Zähler. Wenn der Prozeß ausgelöst wurde, x die Anzahl der Meldungen, die man ihm mitteilt, dass er aufwachen will, sperrt er das Objekt und prüft, wie viele Objekte vorhanden sind, und wartet wieder auf diese Anzahl von Objekten. Donnerstag, 9. August 2007 um 12:39 Uhr Nope, theres nicht viel können Sie zuverlässig tun. Das Problem ist, durch die Zeit, die Sie WaitForExit aufrufen, kann die Anwendung bereits eine andere Anwendung gestartet haben und es gibt keine Möglichkeit zu sagen, ob diese Anwendung andere an diesem Punkt hervorgebracht hat. Es ist die Art von Process. Start. Sie werden nicht feststellen, dass WaitForExit unbegrenzt wartet, weil der Prozess gekommen ist und gegangen ist, bevor Sie es angerufen haben Sie Donnerstag, den 09. August 2007 um 13.15 Uhr Nein, ich hoffe, dass die Situation nicht auftreten (Ist es sogar möglich Havent dachte, es vor.) . Sowieso, das eindeutig eines der Probleme beantwortet. Vielen Dank. Aber es sollte eine sollution auf das Problem über das Starten von winword. exe (und ähnlich), dass. Im Taskmanager wird kein Extraprozeß angezeigt (aber immer noch Wort erscheint). Ich möchte die Schaffung eines neuen Prozesses erzwingen, den ich kontrollieren kann. Donnerstag, August 09, 2007 1:25 PM Gut, es verursacht einen neuen Prozeß, sein gerechtes so schnell es kann nicht im Prozess-Forscher erscheinen. Alle Process. Start tut ist fragen Sie den Prozess zu starten theres nichts mehr, dass neue Prozess erforderlich ist. Wenn es nicht wollen, um im Gedächtnis, das ist seine Wahl. Theres nichts, das Sie dagegen tun können, leider. Einige Anwendungen starten immer einen neuen Prozess. Beim Öffnen einer Visual Studio-SLN-Datei werden beispielsweise immer zwei Prozesse gestartet. Theres eine kleine Anwendung, die den Typ der SLN-Datei überprüft und öffnet dann eine entsprechende Version von Visual Studio, da Sie nur eine Anwendung pro Erweiterung zuordnen können. Das andere Problem ist, dass einige Anwendungen mehrere Dokumente gleichzeitig verarbeiten können, dh sie verwenden in der Regel vorhandene Prozesse wieder. In solchen Fällen, wenn der Prozess wiederverwendet wird, weil ein Dokument bereits geöffnet wurde, bedeutet dies, dass das Dokument, das Sie mit Process. Start geöffnet haben, geschlossen werden kann, aber das Prozesshosting weiterhin ausgeführt wird (Wartung des ursprünglichen Dokuments), was bedeutet, dass Sie niemals können Wenn der Prozess, der beim Aufruf von Process. Start wiederverwendet wurde, mit dem Dokument durchgeführt wurde, das mit Process. Start geöffnet wurde. Wenn youre, das schaut, um irgendeine Art von WinWord Lösung zu integrieren, würde ich vorschlagen, dass Automatisierung. Siehe msdn. microsoftnewsgroupsdefault. aspxdgmicrosoft. public. officedevamplangenampcrUS für Diskussionen über die Automatisierung von Office-Produkten. Nun, es ist wahr, dass das Framwork nicht für die Suche nach der Sub-Prozesse direkt, etwas kann zusammen gekettet werden. Sie können die Pid des Prozesses, den Sie gestartet bekommen, dann mit PInvoke Sie können herausfinden, die Eltern Pid aller Prozesse laufen und vergleichen Sie sie. Sie könnten dann warten, bis die Sub-Preocesses zu beenden ist Hier ein Beispiel für die Verwendung der API. Youll wollen in etwas wie Pinvoke, wie man sie umwandeln Donnerstag, 09. August 2007 16.20 Uhr Microsoft führt eine Online-Umfrage, 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


No comments:

Post a Comment