Friday 9 June 2017

C # Prozess Waitforexit Readtoend


System. Diagnostics. ProcessStartInfoClass Assembly: System. dll-Namespace: System. Diagnostics-Zusammenfassung Gibt einen Satz von Werten an, die beim Starten eines Prozesses verwendet werden. C Syntax: public Siegelklasse ProcessStartInfo Bemerkungen ProcessStartInfo wird zusammen mit der Process-Komponente verwendet. Wenn Sie einen Prozess mit der Process-Klasse starten, haben Sie Zugriff auf Prozessinformationen zusätzlich zu denen, die beim Anhängen an einen laufenden Prozess verfügbar sind. Sie können die ProcessStartInfo-Klasse für eine größere Kontrolle über den Prozess verwenden, den Sie starten. Sie müssen mindestens die ProcessStartInfo. FileName-Eigenschaft festlegen, entweder manuell oder mit dem Konstruktor. Der Dateiname ist eine Anwendung oder ein Dokument. Hier wird ein Dokument als beliebiger Dateityp definiert, der eine offene oder eine standardmäßige Aktion zugeordnet hat. Sie können registrierte Dateitypen und ihre zugehörigen Anwendungen für den Computer über den Ordneroptionsdialog, der über das Betriebssystem verfügbar ist, anzeigen. Die Schaltfläche Erweitert führt zu einem Dialog, der anzeigt, ob eine offene Aktion zu einem bestimmten registrierten Dateityp gehört. Darüber hinaus können Sie andere Eigenschaften festlegen, die Aktionen definieren, die mit dieser Datei ausgeführt werden sollen. Sie können einen Wert angeben, der für den Typ der Eigenschaft ProcessStartInfo. FileName für die Eigenschaft System. Diagnostics. ProcessStartInfo. Verb (nicht unterstützt für die freigegebene Quell-CLI-Eigenschaft) spezifisch ist. Sie können z. B. für einen Dokumenttyp einen Ausdruck angeben. Darüber hinaus können Sie die Eigenschaften der ProcessStartInfo. Arguments-Eigenschaft als Befehlszeilenargumente angeben, die an die offene Methode der Dateien übergeben werden sollen. Wenn Sie beispielsweise eine Texteditoranwendung in der Eigenschaft ProcessStartInfo. FileName angeben, können Sie die Eigenschaft ProcessStartInfo. Arguments verwenden, um eine Textdatei anzugeben, die vom Editor geöffnet werden soll. Standard-Eingabe ist in der Regel die Tastatur, und Standard-Ausgabe und Fehler sind in der Regel der Monitor-Bildschirm. Sie können jedoch die ProcessStartInfo. RedirectStandardInput verwenden. ProcessStartInfo. RedirectStandardOutput und ProcessStartInfo. RedirectStandardError - Eigenschaften, um zu bewirken, dass der Prozess Eingaben von einer Datei oder einem anderen Gerät eingibt oder diese zurückgibt. Wenn Sie das Process. StandardInput verwenden. Process. StandardOutput. Oder Process. StandardError-Eigenschaften auf der Process-Komponente, müssen Sie zunächst den entsprechenden Wert auf die ProcessStartInfo-Eigenschaft setzen. Andernfalls wirft das System eine Ausnahme aus, wenn Sie den Stream lesen oder schreiben. Legen Sie ProcessStartInfo. UseShellExecute fest, um festzulegen, ob der Prozess mit der Betriebssystem-Shell gestartet werden soll. Sie können den Wert einer beliebigen ProcessStartInfo-Eigenschaft bis zu dem Zeitpunkt ändern, zu dem der Prozess gestartet wird. Nachdem Sie den Prozess gestartet haben, hat die Änderung dieser Werte keine Auswirkung. System. Diagnostics. ProcessStartInfo-Benutzerliste: Standardkonstruktor. Dieser Konstruktor wird von abgeleiteten Klassenkonstruktoren aufgerufen, um den Zustand in diesem Typ zu initialisieren. Initialisiert eine neue Instanz der ProcessStartInfo-Klasse, ohne einen Dateinamen anzugeben, mit dem der Prozess gestartet werden soll. Überladen:.ctor (string fileName) Initialisiert eine neue Instanz der ProcessStartInfo-Klasse und gibt einen Dateinamen wie eine Anwendung oder ein Dokument an, mit dem der Prozess gestartet werden soll. Überladen:.ctor (string fileName, string arguments) Initialisiert eine neue Instanz der ProcessStartInfo-Klasse und gibt einen Anwendungsdateinamen an, mit dem der Prozess gestartet werden soll, sowie einen Satz von Befehlszeilenargumenten, die an die Anwendung übergeben werden. Gest oder legt den Satz von Befehlszeilenargumenten fest, die beim Starten der Anwendung verwendet werden sollen. Ruft Suchpfade für Dateien, Verzeichnisse für temporäre Dateien, anwendungsspezifische Optionen und andere ähnliche Informationen ab. System. Diagnostics. ProcessStartInfo Mitgliedsdetails Überladen ctor 1 Zusammenfassung Initialisiert eine neue Instanz der ProcessStartInfo-Klasse, ohne einen Dateinamen anzugeben, mit dem der Prozess gestartet werden soll. Standardkonstruktor. Dieser Konstruktor wird von abgeleiteten Klassenkonstruktoren aufgerufen, um den Zustand in diesem Typ zu initialisieren. C Syntax: Bemerkungen Sie müssen mindestens die Eigenschaft ProcessStartInfo. FileName festlegen, bevor Sie den Prozess starten. Der Dateiname ist eine Anwendung oder ein Dokument. In diesem Fall wird ein Dokument als beliebiger Dateityp definiert, der eine offene oder eine standardmäßige Aktion zugeordnet hat. Sie können registrierte Dateitypen und ihre zugehörigen Anwendungen für den Computer über den Ordneroptionsdialog, der über das Betriebssystem verfügbar ist, anzeigen. Die Schaltfläche Erweitert führt zu einem Dialog, der anzeigt, ob eine offene Aktion zu einem bestimmten registrierten Dateityp gehört. Optional können Sie auch andere Eigenschaften festlegen, bevor Sie den Prozess starten. Die System. Diagnostics. ProcessStartInfo. Verb (nicht unterstützt auf der freigegebenen Quell-CLI) - Eigenschaft liefert Aktionen, wie z. B. Drucken, mit der Datei, die in der ProcessStartInfo. FileName-Eigenschaft angegeben wird. Die Eigenschaft ProcessStartInfo. Arguments bietet eine Möglichkeit, Befehlszeilenargumente an die Datei zu übergeben, wenn das System sie öffnet. Überladen ctor 2 Zusammenfassung Initialisiert eine neue Instanz der ProcessStartInfo-Klasse und gibt einen Dateinamen wie eine Anwendung oder ein Dokument an, mit dem der Prozess gestartet werden soll. C Syntax: Eine Anwendung oder ein Dokument, mit dem ein Prozess gestartet wird. Hinweise Der Dateiname ist eine Anwendung oder ein Dokument. In diesem Fall wird ein Dokument als beliebiger Dateityp definiert, der eine offene oder eine standardmäßige Aktion zugeordnet hat. Sie können registrierte Dateitypen und ihre zugehörigen Anwendungen für den Computer über den Ordneroptionsdialog, der über das Betriebssystem verfügbar ist, anzeigen. Die Schaltfläche Erweitert führt zu einem Dialog, der anzeigt, ob eine offene Aktion zu einem bestimmten registrierten Dateityp gehört. Sie können die ProcessStartInfo. FileName-Eigenschaft nach Aufruf dieses Konstruktors ändern, bis zu dem Zeitpunkt, zu dem der Prozess gestartet wird. Nachdem Sie den Prozess gestartet haben, hat die Änderung dieser Werte keine Auswirkung. Overloaded ctor 3 Zusammenfassung Initialisiert eine neue Instanz der ProcessStartInfo-Klasse und gibt einen Anwendungsdateinamen an, mit dem der Prozess gestartet werden soll, sowie einen Satz von Befehlszeilenargumenten, die an die Anwendung übergeben werden. C Syntax: Eine Anwendung, mit der ein Prozess gestartet wird. Befehlszeilenargumente, die an die Anwendung übergeben werden, wenn der Prozess gestartet wird. Hinweise Der Dateiname ist eine Anwendung oder ein Dokument. In diesem Fall wird ein Dokument als beliebiger Dateityp definiert, der eine offene oder eine standardmäßige Aktion zugeordnet hat. Sie können registrierte Dateitypen und ihre zugehörigen Anwendungen für den Computer über den Ordneroptionsdialog, der über das Betriebssystem verfügbar ist, anzeigen. Die Schaltfläche Erweitert führt zu einem Dialog, der anzeigt, ob eine offene Aktion zu einem bestimmten registrierten Dateityp gehört. Sie können die Eigenschaften ProcessStartInfo. FileName oder ProcessStartInfo. Arguments ändern, nachdem Sie diesen Konstruktor aufgerufen haben, bis zu dem Zeitpunkt, zu dem der Prozess gestartet wird. Nachdem Sie den Prozess gestartet haben, hat die Änderung dieser Werte keine Auswirkung. Eigenschaft: Argumente (read-write) Zusammenfassung Gest oder setzt den Satz von Befehlszeilenargumenten, die beim Starten der Anwendung verwendet werden sollen. C Syntax: Eigenschaft: EnvironmentVariables (schreibgeschützt) Zusammenfassung Ruft Suchpfade für Dateien, Verzeichnisse für temporäre Dateien, anwendungsspezifische Optionen und andere ähnliche Informationen ab. C-Syntax: Eigenschaft: RedirectStandardError (read-write) Zusammenfassung Ruft einen Wert ab, der angibt, ob die Fehlerausgabe des Prozesses in das Process Instances Process. StandardError-Member geschrieben wird, und ermöglicht es Ihnen, an ein anderes Ziel als den Standardfehlerstrom zu schreiben Bildschirm). Dient zum Schreiben von Fehlerdaten in eine Datei oder ein Protokoll. C Syntax: Bemerkungen Die Process-Komponente kommuniziert mit einem Child-Prozess über eine Pipe. Wenn ein untergeordneter Prozess genug Daten in die Pipe schreibt, um den Puffer zu füllen, wird das Kind blockieren, bis das übergeordnete Element die Daten aus der Pipe liest. Dies kann zu einem Deadlock führen, wenn Ihre Anwendung alle Ausgabe auf Standardfehler und Standardausgabe liest, z. B. unter Verwendung des folgenden C-Codes. In diesem Fall würden sowohl der übergeordnete als auch der untergeordnete Prozess blockiert, da die gefüllte Pipe den unterordneten Prozess am Abschluss verhindert, während der übergeordnete Prozess unbegrenzt darauf wartet, dass der untergeordnete Prozess beendet wird. Dieses Problem kann durch Verschieben der ReadToEnd () vor dem WaitForExit () behoben werden. wie folgt. Ein ähnliches Problem tritt auf, wenn Sie sowohl Standardausgabe als auch Standardfehler umleiten und dann versuchen, beide zu lesen, zum Beispiel mit dem folgenden C-Code. Wenn der untergeordnete Prozess einen beliebigen Text in einen Standardfehler schreibt, wird er den Prozess blockieren, da der übergeordnete Prozess nicht vom Standardfehler lesen kann, bis er das Lesen von der Standardausgabe beendet hat. Der übergeordnete Prozess wird jedoch nicht von der Standardausgabe gelesen, bis der Prozess beendet ist. Eine empfohlene Lösung für diese Situation besteht darin, zwei Threads zu erstellen, damit Ihre Anwendung die Ausgabe jedes Streams auf einem separaten Thread lesen kann. Eigenschaft: RedirectStandardInput (read-write) Zusammenfassung Ruft einen Wert ab, der angibt, ob die Prozeßbefehleingabe aus dem Process Instances Process. StandardInput-Member gelesen wird, und ermöglicht es Ihnen, von einer anderen Quelle als dem Standard-Eingabestream (in der Regel die Tastatur) zu lesen. Dient zum Lesen von Daten aus einer Datei. C-Syntax: Eigenschaft: RedirectStandardOutput (read-write) Zusammenfassung Ruft einen Wert ab, der angibt, ob die Prozeßausgabe in das Process Instances Process. StandardOutput-Member geschrieben wird, und ermöglicht es Ihnen, an ein anderes Ziel als den Standardausgabestream (normalerweise den Monitor) zu schreiben Bildschirm). Dient zum Schreiben von Daten in eine Datei. C Syntax: Bemerkungen Die Process-Komponente kommuniziert mit einem Child-Prozess über eine Pipe. Wenn ein untergeordneter Prozess genug Daten in die Pipe schreibt, um den Puffer zu füllen, wird das Kind blockieren, bis das übergeordnete Element die Daten aus der Pipe liest. Dies kann zu einem Deadlock führen, wenn Ihre Anwendung alle Ausgabe auf Standardfehler und Standardausgabe liest, z. B. unter Verwendung des folgenden C-Codes. In diesem Fall würden sowohl der übergeordnete als auch der untergeordnete Prozess blockiert, da die gefüllte Pipe den untergeordneten Prozess am Abschluss verhindert, während der übergeordnete Prozess unbegrenzt darauf wartet, dass der untergeordnete Prozess beendet wird. Dieses Problem kann durch Verschieben der ReadToEnd () vor dem WaitForExit () behoben werden. wie folgt. Ein ähnliches Problem tritt auf, wenn Sie sowohl Standardausgabe als auch Standardfehler umleiten und dann versuchen, beide zu lesen, zum Beispiel mit dem folgenden C-Code. Wenn der untergeordnete Prozess einen beliebigen Text in einen Standardfehler schreibt, wird er den Prozess blockieren, da der übergeordnete Prozess nicht vom Standardfehler lesen kann, bis er das Lesen von der Standardausgabe beendet hat. Der übergeordnete Prozess wird jedoch nicht von der Standardausgabe gelesen, bis der Prozess beendet ist. Eine empfohlene Lösung für diese Situation besteht darin, zwei Threads zu erstellen, damit Ihre Anwendung die Ausgabe jedes Streams auf einem separaten Thread lesen kann. Eigenschaft: UseShellExecute (read-write) Zusammenfassung Ruft einen Wert ab, der angibt, ob die Betriebssystem-Shell verwendet werden soll, um den Prozess zu starten. C Syntax: Bemerkungen Wenn Sie diese Eigenschaft auf false setzen, können Sie Input-, Output - und Fehlerquellen umleiten. Wenn Sie die Betriebssystem-Shell zum Starten von Prozessen verwenden, können Sie jedes Dokument (das ist ein registrierter Dateityp, der einer ausführbaren Datei zugeordnet ist und die eine standardmäßige offene Aktion aufweist) starten und Operationen in der Datei wie dem Drucken ausführen Komponente. Wenn ProcessStartInfo. UseShellExecute false ist. Können Sie nur ausführbare Dateien mit der Process-Komponente starten. Eigenschaft: WorkingDirectory (read-write) Zusammenfassung Ruft das Anfangsverzeichnis für den zu startenden Prozess ab oder legt diesen fest. C-Syntax: Bemerkungen Wenn das Verzeichnis bereits Teil der System-Pfadvariable ist, ist es nicht notwendig, den Verzeichnis-Speicherort in dieser Eigenschaft zu wiederholen. Hi, Ich entwickle eine C-Konsole-Anwendung, die eine Befehlszeile startet und bekommt einige Daten durch einen anderen Befehl Was in dieser Diskussion irrelevant ist). Irgendwann werde ich einige Daten in der Befehlszeile und ich brauche nur die letzte Zeile, die. Ich habe den folgenden Code verwendet: Process. StartInfo. FileName quotcmd. exequot Process. StartInfo. RedirectStandardInput true Process. StartInfo. RedirectStandardOutput true Ich habe Process. StandardInput. WriteLine verwendet, um die Befehle zu schreiben, die ich an der Konsole benötige. Aber wenn Process. StartInfo. RedirectStandardOutput true ist, erhalte ich nicht die erforderliche Ausgabe mit der Anweisung Process. StandardOutput. ReadToEnd () Split (n) Wohingegen ReadLine Option gut funktioniert und ich bekomme die erste Zeile des Textes angezeigt. Da jedes Mal die Daten, die ich auf der Konsole unterscheide, unterscheiden sich, kann ich nicht hardcode jede spezifische Loaction von wo ich meine Ausgabe zu bekommen. Auch wenn ich eine Watch auf die Anweisung Process. StandardOutput. ReadToEnd (). Split (n) Ich erhalte eine Funktion Timeout-Ausnahme. Bitte helfen Sie mir mit diesem Problem. Donnerstag, August 07, 2008 5:44 AM Also habe ich Manjus-Code kopiert. Myprocesss quotcmd. exequot. Zuerst schickte ich den Befehl quotipconfigquot mit einem readToEnd () Timed out. Versuchtes Lesen in Blöcken, scheiterte auch. Getestet waitForInputIddle (), aber vergessen, dass cmd keine grafische Schnittstelle hat, scheiterte auch. Also brauchte ich das cmd, um den Stream zu beenden, wenn ich es jemals lesen wollte. Ok so Ausfahrt Ich versuchte, alle meine Befehle zu senden, INKLUSIVE den Befehl exit, dann lesen. SIn. WriteLine (quotipconfigquot) sIn. WriteLine (quotipconfig allquot) sIn. WriteLine (quotexitquot) string strOutPut sOut. ReadToEnd () Funktioniert wie ein Zauber. Meine ReadToEnd () gibt einen String in einer halben Sekunde, und ich bekam alle Informationen, die ich brauche. -) Das könnte Ihnen helfen, Gauri. Das Unwahrscheinliche, das Unmögliche dauert nur ein wenig länger. - Steven Parker Marked als Antwort von Jack 321 Montag, 11. August 2008 07:51 ReadToEnd () ist geeignet, Deadlock verursachen, vor allem, wenn Sie es nach einem WaitForExit () oder senden Eine Menge von Input. Der Prozess schreibt seine Ausgabe in einen Puffer, der Puffer ist nicht sehr groß (2KB denke ich). Es Sie nicht lesen den Inhalt dieses Puffers, sagen wiith ReadLine (), wird der Prozess abwarten, warten, bis der Puffer geleert werden. Ihr Programm wird abgebrochen, da WaitForExit () nie zurückkehren wird, oder der WriteLine () - Aufruf wird gestoppt, da der Prozess nicht mehr gelesen wird. Wenn das dein Szenario ist, musst du asynchron mit BeginOutputReadLine () lesen. Hans Passant. Antwort # 2 am: April 12, 2008, 06:48:50 pm »Sie müssen auch Process. StartInfo. UseShellExecute auf false gesetzt. Als Antwort markiert von jack 321 Montag, August 11, 2008 5:43 AM Die oben ist eine sehr schöne Standard-Antwort, aber. Ich denke nicht, dass das quotcmdquot den Strom beendet. Von der cmd-Box wird nichts gesendet, um anzuzeigen, dass der Stream beendet wird. Betrachten Sie eine Webseite, die Sie laden, sobald der gesamte HTML-Code Ihren PC erreicht hat, ist der Stream fertig. Das gleiche beim Lesen einer Datei, sobald Sie das letzte Zeichen erreicht haben, ist der Stream fertig. Allerdings mit cmd, ist der Stream nicht quotdonequot. Es wartet nur auf neue Eingabe, dann, wenn Sie ihm einen anderen Befehl geben, wird es Ausgabe wieder haben. Hmm Ich scheine, Probleme zu haben, mich in Englisch wieder auszudrücken, meine Entschuldigungen. Anyways, I dont think theres alles, was Sie tun können, um ReadToEnd () auf einem cmd-output-stream verwenden, es sei denn, Sie senden es den Befehl quotexitquot. Haben Sie versucht, die readline () mit einem kombinieren. Eine Analyse der Linie (d. h. erhalten Sie leere Zeilen) oder b. Den Process. WaitForIddleInput () - Befehl Das Unwahrscheinliche tun wir, das Unmögliche dauert nur ein wenig länger. - Steven Parker Donnerstag, 7. August 2008 07:35 Uhr Falls Sie cmd Prozess laufen lassen. Remeber, um quotEXITquot in Eingabestream zu schreiben Thursday, August 07, 2008 7:51 AM Also habe ich Manjus-Code kopiert. Myprocesss quotcmd. exequot. Zuerst schickte ich den Befehl quotipconfigquot mit einem readToEnd () Timed out. Versuchtes Lesen in Blöcken, scheiterte auch. Bewährte waitForInputIddle (), aber vergessen, cmd hat keine grafische Benutzeroberfläche, fehlgeschlagen. Also brauchte ich das cmd, um den Stream zu beenden, wenn ich es jemals lesen wollte. Ok so Ausfahrt Ich versuchte, alle meine Befehle zu senden, INKLUSIVE den Befehl exit zuerst, dann lesen. SIn. WriteLine (quotipconfigquot) sIn. WriteLine (quotipconfig allquot) sIn. WriteLine (quotexitquot) string strOutPut sOut. ReadToEnd () Funktioniert wie ein Zauber. Mein ReadToEnd () gibt einen String in einer halben Sekunde, und ich bekam alle Informationen, die ich brauche. -) Das könnte Ihnen helfen, Gauri. Das Unwahrscheinliche, das Unmögliche dauert nur ein wenig länger. - Steven Parker Marked als Antwort von Jack 321 Montag, 11. August 2008 07:51 ReadToEnd () ist geeignet, Deadlock verursachen, vor allem, wenn Sie es nach einem WaitForExit () oder senden Eine Menge von Input. Der Prozess schreibt seine Ausgabe in einen Puffer, der Puffer ist nicht sehr groß (2KB denke ich). Es Sie nicht lesen den Inhalt dieses Puffers, sagen wiith ReadLine (), wird der Prozess abwarten, warten, bis der Puffer geleert werden. Ihr Programm wird abgebrochen, da WaitForExit () nie zurückkehren wird, oder der WriteLine () - Aufruf wird gestoppt, da der Prozess nicht mehr gelesen wird. Wenn das Ihr Szenario, youll müssen asynchron mit BeginOutputReadLine () lesen. Hans Passant. Als Antwort markiert von Jack 321 Montag, 11. August 2008 05:44 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

No comments:

Post a Comment