C # Starten Prozess Waitforexit


Ihre Lösung braucht nicht AutoResetEvent aber Sie poll. 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. Antwort von MSDN: Die WaitForExit () () () - Überladung wird verwendet, um den aktuellen Thread zu warten, bis der zugehörige Prozess beendet wird. Diese Methode weist die Prozesskomponente an, eine unbegrenzte Zeitspanne zu warten, bis der Prozess beendet wird. Dies kann dazu führen, dass eine Anwendung nicht mehr reagiert. Wenn Sie beispielsweise CloseMainWindow für einen Prozess aufrufen, der über eine Benutzeroberfläche verfügt, wird die Anforderung des Betriebssystems, den zugeordneten Prozess zu beenden, möglicherweise nicht bearbeitet, wenn der Prozess geschrieben wird, um niemals in seine Nachrichtenschleife zu gelangen. Diese Überlastung stellt sicher, dass alle Verarbeitung abgeschlossen ist, einschließlich der Handhabung von asynchronen Ereignissen für die umgeleitete Standardausgabe. Sie sollten diese Überladung nach einem Aufruf der WaitForExit (Int32) - Uberladung verwenden, wenn die Standardausgabe auf asynchrone Ereignisbehandlungsroutinen umgeleitet wurde. Das ist natürlich für. NET. Was macht Sie denken, dass es nicht warten, bis die Note-Prozess zu beenden Was sind die Anzeichen dafür, was ist der Beweis Freitag, Februar 20, 2009 8.13 PM Nicht sicher, ob dies kürzlich geändert hat, aber zurück in den Tag Anwendungen auf Fenster Handy nie wirklich geschlossen, wenn Sie die X schließe sie zu schließen, würden sie nur minimieren und halten im Hintergrund laufen (dies war kein Fehler, es war ein Feature, da das nächste Mal starten Sie die App würde es wirklich schnell gestartet werden, yah Ich weiß, wahnsinnig, aber wahr), so könnte das sein, warum WaitForExit ist vielleicht seltsam verhalten und warten auf App-Start anstelle von Exit. Aber dann ist es nur Spekulation auf knowlegde der alten Versionen von Windows Mobile basiert. Freitag, den 20. Februar 2009 um 11:03 Uhr Id wie zu stoßen diese Frage auf. Im auf Windows Mobile 6 Standard und Im versuchen, eine Browser-Instanz spawn. Id wie zu warten, bis der Benutzer den Browser schließt. Aber WaitForExit kommt extrem schnell zurück. Hier ist der Code: Process p new Process () p. StartInfo. Argumente quotexample-sitequot p. StartInfo. Verb quotOpenquot p. StartInfo. UseShellExecute false p. StartInfo. FileName quotIExplore. exequot p. Start () p. WaitForExit () MessageBox. Show (quotNow der Browser sollte closedquot sein) Was sollte der richtige Weg, um die erwarteten Resuts erhalten werden, wo das Symbol ist. Symbol. AlexB Dienstag, 9. Juni 2009 09:58 Ich sehe das gleiche Problem, aber auf XP. Ich denke, der Beweis kann in jedem Debugger gesehen werden (wie ich sehe), oder in jeder Konsolenanwendung (nicht unbedingt auf Mobile) Mittwoch, 2. September 2009 8.35 Uhr Außer, dass Sie nicht erhalten dann ein Prozess-Objekt, das Sie können benutzen. MyProc. WaitForExit () Es ist immer noch unverzüglich zurückgegeben, wenn Sie versuchen, Dim myProc als neuen Prozess () myProc Process. Start (quotiexplorequot, quotfinance. yahoo/q/hpsquot Symbol) Mittwoch, 2. September 2009 20.48 Uhr Problem ist, dass Sie nicht eine neue Instanz von iexplore. exe starten. Sie erstellen lediglich ein neues Fenster zum bestehenden Prozess. Meine Vermutung ist, iexplore. exe startet, sieht eine vorhergehende Instanz und kommuniziert mit der vorherigen Instanz, so dass es das neue Fenster öffnet, und dann diese Instanz, die Sie sofort beendet verlassen. Das Verhalten ist also richtig und zu erwarten. Blog. voidnish Mittwoch, den 2. September 2009 um 20:52 Uhr 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 präsentiert, wenn Sie die Msdn-Website verlassen. Möchten Sie teilnehmen Diese Frage kann ein wenig seltsam erscheinen, aber ich versuche, VS2005 durch einen Prozess auszuführen und führen Sie einen bestimmten Befehl und ich waitforexit (). Ich bin die Umleitung meiner Eingabe und Ausgabe erfolgreich, aber immer wieder zufällig erhalten Sie ein Fenster Fehlerberichterstattung Fenster / Nachricht. Das Problem ist, dass ich remoting, also wenn diese Meldung / Fenster während der Prozessausführung auftritt, werde ich hängen, wenn ich in der anderen (Remoting) Maschine anmelden und schließen Sie das Fenster. Gibt es eine Möglichkeit, programmgesteuert zu töten dieses Fenster oder möglicherweise deaktivieren Sie die Meldung / Fenster vom Auftreten Ich habe gedacht, VS laufen in einer leisen Ausführung (Ich habe noch einen Weg, dies zu tun). Ich habe auch versucht, um zu sehen, wenn es etwas lachte, wenn dies geschieht, vergleichen, wenn es nicht. Ich habe versucht, FindWindow und FindWindowEx zusammen mit SendMessage zu verwenden, aber ich konnte das richtige Fensterhandle nicht finden. Aber da ich weiß, dass eine Windows-Fehlermeldung Msssage-Box wird auftauchen, überprüfte ich, um zu sehen, ob es sein eigener Prozess (und es ist). Der Prozess ist dwwin. exe (Dr. Watson Win) und alles, was ich tun musste, war dies, damit ich das aktuelle Problem richtig zu bekommen. Ersetzen Sie den aktuellen Codeblock unten für die WaitForExit () - Anweisung, die ich zuvor hatte. Proc. WaitForExit (60000) // eine Minute Prozess ProcArray Process. GetProcessesByName (quotdwwinquot) foreach (Prozess ProcessFound in ProcArray) Ich überprüfte auch, um zu sehen, wenn Sie in der Lage, die Process. MainWindowTitle () erhalten, aber es ist auf quotquot gesetzt. Also das ist ein Hack und ich mag es nicht, aber es funktioniert für die aktuelle Ausführung. Montag, 29. Oktober 2007 19:26 Nein, ich kann die Eingabe und Ausgabe ohne Probleme umleiten. Der Fehler, dass ich empfange, ist die allgemeine Windows-Fehlermeldung und leider ist es in Japanisch, so weiß ich nicht, was der genaue Fehler ist, aber es ist der allgemeine Fehler. Ich habe nicht den Code vor mir, aber ich eingerichtet Delegierten / Threads zu lesen umgeleitet den Fehler und die Ausgabe, nachdem ich den gesamten Prozess beenden. Ich kann nicht kommen mit irgendetwas und ich bin in der Lage, den gleichen Prozess auf meinem eigenen Computer laufen, aber ich bin nicht in der Lage, dies zu tun, einen bestimmten Befehl durch remoting. Ich werde versuchen, es morgen Remoting auf einem nicht-japanischen Maschine bei der Arbeit, und ich werde meine Ergebnisse ungeachtet Post. Freitag, 26. Oktober 2007 02:34 Sind Sie mit der Konsole quotcmdquot. Wenn ja, dann müssen Sie auch exit eingeben. Wenn Sie eine Vorstellung davon, wie viel Zeit Ihr Prozess zu nehmen, dann können Sie bool beendet process. WaitForExit (timeInMilliSeconds), wenn (beendet) // Prozess beendet vor Zeitüberschreitung. Else // Druck Fehlermeldung Dies kann nicht mit dem, was Sie tun, verwandt werden, aber ich hatte eine Erfahrung, wo der Prozess nicht beenden würde, wenn ich seine Ausgabe umgeleitet. Versuchen Sie, die Ausgabeumleitung zu deaktivieren und sehen Sie, ob der Prozess beendet wird. Probieren Sie es aus, es könnte funktionieren. Freitag, 26. Oktober 2007 11:58 Ich möchte das versuchen, aber es ist zu viel von einem Hack. Ich habe zu viele verschiedene Befehle, die unterschiedliche Mengen an Zeit (30 Sekunden bis 25 Minuten) nehmen, so gibt es keine Echtzeit-Einstellung, die ich ohne Zerstörung meiner Leistung Platz könnte. Diese Funktion hat für mehrere Befehle in den letzten 6 Monaten korrekt funktioniert und jetzt entscheidet sie sich auf mich. Ich versuchte es auf einem anderen Computer ohne Probleme (das ist wirklich messing mit mir). Ich weiß, dass es nicht die Ausgabe / Fehlerumleitung ist, weil ein neues WINDOW auf dem Bediener verursacht wird, den ich zu remoting bin. Sobald ich dieses Fenster schließe, verlässt mein Prozess wie erwartet und die richtige Ausgabe wird auf der Benutzerseite angezeigt. Vielen Dank für Ihre Hilfe, aber ich bin wirklich frustriert mit diesem Problem. Freitag, 26. Oktober 2007 um 15:01 Uhr Ohne zu wissen, das Detail der Nachricht waren nur raten das Problem. Haben Sie installiert. NET 3.5 Beta oder Visual Studio 2008 Beta überhaupt Wie verwenden Sie Prozess, um das Programm zu starten, Process. Start (quotfile. exequot) oder verwenden Sie ProcessStartInfo Freitag, 26. Oktober 2007 15.21 Uhr Nein, Ich habe. NET 2003 und. NET 2005 installiert. Proc new Process () procSI new ProcessStartInfo () Ich setze dann einen neuen Thread für sowohl den StandardError als auch den StandardOutput ein und schreibe dann meine Befehle und if (Umleitung von standard out) Start thread für st. Out If (Umleitung Standardfehler) Startthread für st. Error Proc. WaitForExit () lt -------- Dies ist, wo das Generic Windows Error Reporting Fenster auftritt. Ich übersetzte, was ich konnte aus dem Fenster, das auftaucht. Microsoft Visual Studio 2005 Da Problem auftritt, beendet es Microsoft Visual Studio 2005. Wir verwenden Unannehmlichkeiten, gibt es keine Entschuldigung. Nochmals vielen Dank für Ihre Zeit. Ich habe die StreamWriter sIn vor dem Erstellen der proc Process-Objekt. Ich dann umleiten die Eingabe nach dem proc. Start () - Befehl, also wie kann ich nicht besitzen dieses Ungeachtet, kann ich die Änderung, um die sIn. Close () auf nach dem Aufruf von WaitForExit zu sehen, ob dies irgendwelche Änderungen macht verschieben. Das Proc war ein Typ, sollte es proc. Wieder ist es nicht eine Fehlermeldung, also gibt es keine Stapelübertragung. Meine StandardError-Umleitung ist leer und die Standard-OUtput-Umleitung enthält, was ich erwartet hatte, aber nichts auf einen Fehler aufgetreten. Dies ist, warum alles noch funktioniert, nachdem ich das Fenster Windows Error Reporting schließen. Ich werde nach, was passiert, nachdem ich die sIn. Close () Zeile unterhalb der WaitForExit () Zeile. Freitag, 26. Oktober 2007 16:59 Peter Ritchie hat geschrieben: Sie möchten nicht das sIn Objekt schließen, bis die Anwendung beendet hat, wenn youre Umleitung. Man sollte nicht schließen alle diese Streams überhaupt. Das Process-Objekt besitzt sie und es ist diejenige, die für die Reinigung nach sich selbst verantwortlich ist. Am besten sollte man Process. Dispose () nach Abschluss des Process-Objekts aufrufen. Sie sicherlich nicht brauchen (z. B. seine redundante), aber es sollte nicht ein Problem verursachen, nachdem der Prozess beendet hat. Process. Close ist die empfohlene Methode zum Schließen der Ströme Standardinput und Standardoutput (und Standarderror). Ich würde überrascht sein, wenn die Dispose-Methode nicht aufgerufen Close, zumindest als Teil seiner Operation. Ich möchte mit der Tatsache, dass da Prozess implementiert IDisposable (indirekt durch Erweiterung Komponente, die es implementiert), sollte man auf Dispose aufrufen und lassen, dass die ordnungsgemäße Aufräumen. Ich würde nicht empfehlen aufrufen Process. Close statt, noch zusätzlich zu, Process. Dispose. Ja, Anrufe verwerfen Schließen. Meine erste Empfehlung ist, einen verwendenden Block zu verwenden, meine zweite ist, Close aufzurufen, wenn Sie wissen, wann Sie damit fertig sind. In Objekten, die eine quotClosequot-Methode implementieren, obwohl sie IDisposable ist, ist es viel klarer, die "Closequot" - Methode zu verwenden. Plus, ohne einen Benutzungsblock zu verwenden, haben Sie keine Möglichkeit, die Variable und den Aufruf zu Dispose zu scopieren - das Objekt könnte nach dem Aufruf von Dispose verwendet werden. Wenn Sie Close youve verwenden, werden alle verwalteten Ressourcen entfernt, aber das Objekt kann weiterhin verwendet werden (dh es wurde nicht als quotdisposedquot markiert und Sie können es verwenden, um eine andere Anwendung auszuführen, ohne ein neues Process-Objekt zuzuweisen, das sonst eine ObjectDisposedException auslöst ). So, wenn die erste Empfehlung ist, einen verwendenden Block zu verwenden, dann wäre das nächste am besten zu Dispose zu rufen. Nicht schließen, wenn, wie Sie gesagt haben, Sie wissen, dass Sie mit dem Objekt getan. Durch nur Aufruf von Close auf etwas, das IDisposable implementiert, ist der Entwickler möglicherweise einen Fehler machen. Wenn Dispose einige zusätzliche Bereinigung jenseits nur Delegieren zu schließen, dann wird der Programmierer sich selbst für einen Fehler, indem Sie einfach aufrufen Close. Es kann ein Fall für den Aufruf von Close geben, aber nur, wenn Sie mit dem Objekt nicht fertig sind, wie Sie am unteren Ende Ihrer letzten Antwort angegeben haben. Aber wenn Sie damit fertig sind, rufen Sie Dispose. Also, wenn die erste Empfehlung ist, einen verwendenden Block zu verwenden, dann wäre die nächste am besten zu Dispose zu rufen. Nicht schließen, wenn, wie Sie gesagt haben, Sie wissen, dass Sie mit dem Objekt getan. Durch nur Aufruf von Close auf etwas, das IDisposable implementiert, ist der Entwickler möglicherweise einen Fehler machen. Wenn Dispose einige zusätzliche Bereinigung jenseits nur Delegieren zu schließen, dann wird der Programmierer sich selbst für einen Fehler, indem Sie einfach aufrufen Close. Es kann ein Fall für den Aufruf von Close geben, aber nur, wenn Sie mit dem Objekt nicht fertig sind, wie Sie am unteren Ende Ihrer letzten Antwort angegeben haben. Aber wenn Sie damit fertig sind, rufen Sie Dispose. Tatsächlich ist seine QuoteQuote gleichbedeutend mit: DisposableClass obj neu DisposableClass () IDisposable Einweg-obj als IDisposable wenn (Einweg-Null) Aber ja, das ist, was eine using-Anweisung funktionell gleichbedeutend ist, aber ich stimme nicht explizit aufrufen Dispose in Anwesenheit einer quotClosequot-Methode sollte Die erste Wahl wegen des fehlenden Scoping mit dem Dispose-Aufruf sein. Ich habe den Dienst ausgeführt, aber ich habe es gestoppt, weil es für 2 Stunden lief und hatte es nie der Breakpoint, dass es innerhalb von 10 Minuten von mir zu Beginn meines getroffen haben sollte Klient. Ich habe die sIn. Close () - Linie gerade erst kommentiert und den Service neu gestartet und der Client und alles funktioniert wie zuvor. Ich kann den Haltepunkt nach dem WaitForExit () treffen und ich vervollständige, mit der Windows-Fehlermeldung Meldung noch (wie es vorher war). Also, in meinem Fall, ich muss den Input-Stream zu schließen, um den Prozess wie erwartet beenden. Gibt es irgendwelche anderen Ideen kann ich empfehlen die sIn. Close () Zeile, wenn Sie etwas überprüfen möchten. Freitag, 26. Oktober 2007 19:19 Anthony Maimone hat geschrieben: Ich hatte den Dienst ausgeführt, aber ich hielt es, weil es für 2 Stunden lief und hatte es nie der Breakpoint, dass es innerhalb von 10 Minuten von mir begann mein Client getroffen haben sollte . Ich habe die sIn. Close () - Linie gerade erst kommentiert und den Service neu gestartet und der Client und alles funktioniert wie zuvor. Ich kann den Haltepunkt nach dem WaitForExit () treffen und ich vervollständige, mit der Windows-Fehlermeldung Meldung noch (wie es vorher war). Also, in meinem Fall, ich muss den Input-Stream zu schließen, um den Prozess wie erwartet beenden. Gibt es irgendwelche anderen Ideen kann ich empfehlen die sIn. Close () Zeile, wenn Sie etwas überprüfen möchten. Es wäre hilfreich, die Ausnahmedetails zu sehen, wenn Sie den Fehler erhalten (wie der Aufruf-Stack). Wie verwenden Sie die Standard-Eingabe und die Standard-Ausgabe Verwenden Sie alle ReadLine-Methoden Peter, mein Punkt ist: Wenn Sie nicht aufrufen Dispose auf ein Objekt, das (direkt oder indirekt) IDisposable implementiert, dann sind Sie nur fragen, für einen Bug. Ich möchte nicht auf diesem endlos aber argumentieren. Sie können weiterhin tun, wie Sie es tun, und ich bleibe bei mir. Solange wir nicht haben, um jeden anderen Code zu halten, fein. Und übrigens, ein quotusingquot Block schützt Sie auch nicht. Nichts hindert Sie daran, die Variable außerhalb des Blocks (wenn ich mich richtig erinnere) zu deklarieren, so dass es noch im Bereich sein kann, nachdem der Block endet. Sie müssen sorgfältig schriftlich korrekten Code schreiben. Wenn Sie es in der quotusingquot-Anweisung erklären, das ist eine Möglichkeit. Aber mit dem try / finally Ansatz zu entlassen, nur weil es die Variable im Umfang lässt ist nicht wirklich der Punkt. Es muss immer noch Dispose () d irgendwo sein. Freitag, 26. Oktober 2007 19:34 Peter Ritchie hat geschrieben: Anthony Maimone schrieb: Ich hatte den Dienst ausgeführt, aber ich hielt es, weil es für 2 Stunden lief und hatte es nie der Breakpoint, dass es innerhalb von 10 Minuten getroffen haben sollte Ich beginne meinen Mandanten. Ich habe die sIn. Close () - Linie gerade erst kommentiert und den Service neu gestartet und der Client und alles funktioniert wie zuvor. Ich kann den Haltepunkt nach dem WaitForExit () treffen und ich vervollständige, mit der Windows-Fehlermeldung Meldung noch (wie es vorher war). Also, in meinem Fall, ich muss den Input-Stream zu schließen, um den Prozess wie erwartet beenden. Gibt es irgendwelche anderen Ideen kann ich empfehlen die sIn. Close () Zeile, wenn Sie etwas überprüfen möchten. Es wäre hilfreich, die Ausnahmedetails zu sehen, wenn Sie den Fehler erhalten (wie der Aufruf-Stack). Wie verwenden Sie die Standard-Eingabe und die Standard-Ausgabe Verwenden Sie alle ReadLine-Methoden Wieder ist dies keine Ausnahme, die geworfen wird, so dass ich keine Ausnahme Details sehen. Ich gehe nicht direkt in den catch-Block in meinem Code, ich wieder DIREKT nach dem Aufruf von WaitForExit (). Das Fenster, das ich empfange, ist das gleiche, das Sie erhalten, wenn jedes Microsoft-Produkt unerwartet schließt und MS Informationen über den Crash will. Also wieder gibt es keine Ausnahme Details. Jedoch in einem der Systemprotokolle, bekomme ich eine mesage (übersetzt aus Japanisch) quotDevenv. exe Anwendung erros auftreten, 8.0.50727.762 Version der Fehler aufgetreten msvcr80.dll-Modul, Version 8.0.50727.762, Fehler aufgetreten Adresse 0x00039001. Für weitere Informationen, go. microsoft/fwlink/events. asp das Helo und Support Center bitte refer. quot Ich bin die Umleitung der Standard-Eingang, um in den verschiedenen Befehle in, weil ich hatte Schwierigkeiten bekommen sie zu arbeiten, wie ich wollte Form der StartInfo . Ich bin die Umleitung der Ausgabe-und Fehler-Streams zu überprüfen, was sie in ihnen haben, nachdem der Prozess beendet hat. Dies wird mir erlauben, für alles, was ich möchte in jedem Stream, wenn wir fertig sind zu überprüfen. Ich auch nicht zulassen, entweder der Ausgang oder Fehler Umleitung Threads zu verbinden, bis nach dem Prozess hat den Aufruf von WaitForExit übergeben. Ich bin völlig verstopft. Peter, mein Punkt ist: Wenn Sie nicht aufrufen Dispose auf ein Objekt, das (direkt oder indirekt) IDisposable implementiert, dann youre nur fragen, für einen Bug. Ich möchte nicht auf diesem endlos aber argumentieren. Sie können weiterhin tun, wie Sie es tun, und ich bleibe bei mir. Solange wir nicht haben, um jeden anderen Code zu halten, fein. Ich stimme nicht zu. Sein nicht ein quotbugquot, zum von Dispose nicht zu benennen. Ihre Ressourcen werden nicht sofort befreit, aber die GC wird sie freigeben, wenn sie den Speicher braucht (vorausgesetzt das Dispose-Muster ist richtig implementiert und ein Finalizer existiert). Wenn die Klasse youre mit implementiert eine quotClosequot - Methode, die nicht alle die gleichen Dinge wie quotDisposequot, Schließen sollte entweder als solche oder theres ein Fehler in der Klasse dokumentiert werden. Ive nie begegnet eine Framework-Klasse implementiert IDisposable und eine Close () - Methode, die einen quotleakquot eingeführt, wenn Close aufgerufen wurde, ohne Aufruf Dispose. Das überwältigende Muster für Dispose / Close ist, dass Dispose calls Close sowie das Setzen eines quotdisposedquot-Flags (für das Werfen von ObjectDisposedException) verwendet wird. In der Tat ist dies in der. NET Framework General Reference: quotOccasionally ein Domain-spezifischer Name ist geeigneter als Dispose. Beispielsweise könnte eine Dateikapselung den Methodennamen Close verwenden. In diesem Fall implementieren Sie Dispose privat und erstellen eine öffentliche Close-Methode, die Dispose aufruft. Das folgende Codebeispiel veranschaulicht dieses Muster. Sie können Close durch einen Methodennamen ersetzen, der zu Ihrem domain. quot passt. Implementieren von Finalize und Entsorgen von nicht verwalteten Ressourcen Sowohl für bestimmte Klassen von Objekten wie Dateien oder Datenbankverbindungsobjekten repräsentiert eine Methode Close die logische Operation Sollte durchgeführt werden, wenn der Objektkonsumenten mit dem object. quot aus dem Verbessern der Managed Code Performance beendet ist (obwohl es auch es auch Details in gut geschriebenen Fällen, beide sind funktional equivalent. quot es impliziert, dass mit Close ist klarer mit quotbetter representquot.) Und übrigens, ein quotusingquot Block schützt Sie auch nicht. Nichts hindert Sie daran, die Variable außerhalb des Blocks (wenn ich mich richtig erinnere) zu deklarieren, so dass es noch im Bereich sein kann, nachdem der Block endet. Sie müssen sorgfältig schriftlich korrekten Code schreiben. Wenn Sie es in der quotusingquot-Anweisung erklären, das ist eine Möglichkeit. Aber mit dem try / finally Ansatz zu entlassen, nur weil es die Variable im Umfang lässt ist nicht wirklich der Punkt. Es muss immer noch Dispose () d irgendwo sein. Ja, theres alle möglichen Weisen, die Sie im Fuß schießen können, aber das ist nicht ein Drehbuch, das wir diskutierten. Ich würde persönlich schießen alle Code ich so überprüft. Das wäre auf meiner nicht empfohlenen Liste. Freitag, 26. Oktober 2007 19:54 Wieder ist dieses nicht eine Ausnahme, die geworfen wird, also sehe ich keine Ausnahmedetails. Ich gehe nicht direkt in den catch-Block in meinem Code, ich wieder DIREKT nach dem Aufruf von WaitForExit (). Das Fenster, das ich empfange, ist das gleiche, das Sie erhalten, wenn jedes Microsoft-Produkt unerwartet schließt und MS Informationen über den Crash will. Also wieder gibt es keine Ausnahme Details. Jedoch in einem der Systemprotokolle, bekomme ich eine mesage (übersetzt aus Japanisch) quotDevenv. exe Anwendung erros auftreten, 8.0.50727.762 Version der Fehler aufgetreten msvcr80.dll-Modul, Version 8.0.50727.762, Fehler aufgetreten Adresse 0x00039001. Für weitere Informationen, go. microsoft / fwlink/events. asp das Helo und Support Center bitte refer. quot Ich nahm an, dass Ihre Anwendung die Nachricht generierte (in diesem Fall sollten Sie immer eine Ausnahme und eine Stack-Trace erhalten), war es nicht klar, dass Sie Nach dem Aufruf von WaitForExit () fortsetzen. Es klingt für mich wie die Anwendung youre läuft abnormal beendet. Führen Sie devenv. exe Im nicht sicher, was Sie in Ihrer Anwendung tun können, um eine andere Anwendung beenden abnormal zu stoppen. Anthony Maimone schrieb: Ich bin die Umleitung der Standard-Eingang, um in den verschiedenen Befehle in, weil ich hatte Schwierigkeiten bekommen sie zu arbeiten, wie ich wollte Form der StartInfo. Ich bin die Umleitung der Ausgabe-und Fehler-Streams zu überprüfen, was sie in ihnen haben, nachdem der Prozess beendet hat. Dies wird mir erlauben, für alles, was ich möchte in jedem Stream, wenn wir fertig sind zu überprüfen. Ich auch nicht zulassen, entweder der Ausgang oder Fehler Umleitung Threads zu verbinden, bis nach dem Prozess hat den Aufruf von WaitForExit übergeben. Ich bin völlig verstopft. Sie können eine Deadlock-Blockade, wenn Sie blockieren beim Lesen von und Anwendungen Standard-Ausgabe - die entsperren würde, wenn Sie den Stream geschlossen, glaube ich. Das einzige, was ich denken kann, ist die Schaffung einer Anwendung, die auf dem Server ausgeführt wird und überwachen Fenster, die Form der Prozesse, die Sie remote steuern und finden Sie dann die richtigen Schaltflächen und drücken Sie sie programmgesteuert eine Nachricht an die Nachricht Pumpe des Dialogfensters . Diese alos passiert mit Excel-, Wort-und anderen Anwendungen, die mit Autimation verwendet werden können MSFT nicht entwerfen diese Anwendungen ohne Benutzerinteraktion laufen, so dass einmal in eine Weile werden Sie Fenster auf Fehler erhalten. Haben Sie darüber nachgedacht, mit MSBuid, die mehr geeignet für Batch-Builds ist, auch scheint es, dass in TFS 2008 Build-Server werden einfach zu bauen. Nun, ich versuchte, FindWindow und FindWindowEx zusammen mit SendMessage zu verwenden, aber ich konnte nicht das richtige Fensterhandle zu finden. Aber da ich weiß, dass eine Windows-Fehlermeldung Msssage-Box wird auftauchen, überprüfte ich, um zu sehen, ob es sein eigener Prozess (und es ist). Der Prozess ist dwwin. exe (Dr. Watson Win) und alles, was ich tun musste, war dies, damit ich das aktuelle Problem richtig zu bekommen. Ersetzen Sie den aktuellen Codeblock unten für die WaitForExit () - Anweisung, die ich zuvor hatte. Proc. WaitForExit (60000) // eine Minute Prozess ProcArray Process. GetProcessesByName (quotdwwinquot) foreach (Prozess ProcessFound in ProcArray) Ich überprüfte auch, um zu sehen, wenn Sie in der Lage, die Process. MainWindowTitle () erhalten, aber es ist auf quotquot gesetzt. Also das ist ein Hack und ich mag es nicht, aber es funktioniert für die aktuelle Ausführung. Montag, 29. Oktober 2007 19:26 Uhr

Comments