Saturday 24 June 2017

C # Processstartinfo 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. Hallo, ich kann PSEXEC zu laufen gut bekommen, aber wenn ich in ein Argument übergeben, um die Ergebnisse von MsiZap zu protokollieren, wird kein Protokoll erstellt. static void Main (string args) Processstartinfo new Process () startInfo. FileName quotpsexec. exequot startInfo. Arguments quotComputerName C: Wenn WSMGMTBINMsiZap. exe TW gtgt computernameCWSMGMTBinDateInTrayZap. logquot Process. Start (Startinfo) eliminieren ich die quotgtgt computernameCWSMGMTBinDateInTrayZap. logquot aus der Argument, es funktioniert gut. Aber wenn ich es hinzufüge, läuft es nie. Im nur versuchen, Rohr ein Protokoll der Ergebnisse. Montag, Februar 02, 2015 7:28 PM Wahrscheinlich müssen Sie die Ausgabe selbst abfangen mit startInfo. RedirectStandardOutput etc. Die Dokumentation erklärt, wie es zu tun. Um zu vereinfachen, erstellen Sie eine Batchdatei (.BAT) mit einer einzelnen Zeile mit vollständigem Befehl. Dann starten Sie es mit Process-Klasse. Wenn es funktioniert, dann erstellen Sie die Batch-Datei programmgesteuert in temporären Ordner (Path. GetTempPath), dann entfernen Sie es nach Process. WaitForExit. Herausgegeben von Viorel MVP Dienstag, 3. Februar 2015 07.47 Als Antwort von TheInfamousOne17 Freitag, 6. Februar 2015 07.27 Uhr Dienstag, 3. Februar 2015 07.44 Alle Antworten Haben Sie Administratorrechte auf lokaler haben und Remote-PC und die lokalen und Remote-PCs sind in der gleichen Gruppe Sie Protokolldatei Name hat eine, die admin Zugriffsrechte angibt. Sie brauchen nicht das Dollarzeichen, wenn der Ordner freigegeben wird. Montag, Februar 02, 2015 8:37 PM Ich echo, was Joel gesagt hat. Darüber hinaus und Im nicht sicher, ob dies das Problem ist oder nicht, aber Sie können dies zu prüfen. Gehen Sie folgendermaßen vor, um eine Anwendung zu markieren, die immer als Administrator ausgeführt wird: 1. Suchen Sie im Startmenü das Programm, das Sie immer als Administrator ausführen möchten. 2. Klicken Sie mit der rechten Maustaste auf die Verknüpfung der Anwendungen, und klicken Sie dann auf Eigenschaften. 3. Klicken Sie im Dialogfeld Eigenschaften auf die Registerkarte Kompatibilität. 4. Führen Sie eine der folgenden Aktionen aus: Um die Einstellung auf den aktuell angemeldeten Benutzer anzuwenden, aktivieren Sie das Kontrollkästchen Dieses Programm als Administrator ausführen, und klicken Sie dann auf OK. Um die Einstellung auf alle Benutzer auf dem Computer anzuwenden und unabhängig davon, welche Verknüpfung verwendet wird, um die Anwendung zu starten, klicken Sie auf Einstellung ändern für alle Benutzer, um das Dialogfeld Eigenschaften für die Anwendung. exe-Datei anzuzeigen, wählen Sie die Option Dieses Programm als Administrator ausführen aus Und klicken Sie dann zweimal auf OK. Wissen ist die einzige Sache, die ich Ihnen geben kann, und noch behalten, und wir sind beide besser dran für sie. Montag, Februar 02, 2015 9:49 PM Ja, ich habe admin Privilegien auf beiden Maschinen. Das ist nicht das Problem. Ich kann psexec. exe gerade fein laufen und ich kann die MsiZap. exe gerade fein nennen. Das Teil, das ausfällt, ist das Protokollieren, das ich versuche, es zu überschreiten. Ich kann Psexec starten und ausführen MsiZap. exe TW gtgt computernameCWSMGMTBinDateInTrayZap. logquot Dies funktioniert auf beiden Maschinen manuell. Ich kann processStartinfo wie folgt ausführen. ProcessStartInfo startInfo new ProcessStartInfo () startInfo. Arguments quotComputerName C: WSMGMTBINMsiZap. exe TW process. Start (startInfo) Das funktioniert gut. Aber wenn ich versuche, zu den startInfoArguments hinzufügen, um ein Protokoll herauszuholen, funktioniert es nicht. Processstartinfo new Process () startInfo. FileName quotpsexec. exequot startInfo. Arguments quotComputerName C: WSMGMTBINMsiZap. exe TW gtgt computernameCWSMGMTBinDateInTrayZap. logquot Dienstag, 3. Februar 2015 01.56 Wahrscheinlich müssen Sie die Ausgabe abfangen selbst mit startInfo. RedirectStandardOutput usw. Die Dokumentation erklärt, wie es geht. Um zu vereinfachen, erstellen Sie eine Batchdatei (.BAT) mit einer einzelnen Zeile mit vollständigem Befehl. Dann starten Sie es mit Process-Klasse. Wenn es funktioniert, dann erstellen Sie die Batch-Datei programmgesteuert in temporären Ordner (Path. GetTempPath), dann entfernen Sie es nach Process. WaitForExit. Editiert von Viorel MVP Dienstag, 3. Februar 2015 07:47 Als Antwort markiert von TheInfamousOne17 Freitag, 6. Februar 2015 07:27 Uhr Versuchen Sie bitte diesen Link: Dienstag, 03. Februar 2015 8:52 AM bitte versuchen Sie diesen Link: Danke, der erste Link wirklich nicht helfen, aber ich schätze den 2. Link mit paexec. exe. (Poweradmin). Es half nicht mit Rohr heraus ein Maschinenbordbuch, aber nichtsdestoweniger mag ich dieses irgendwie verwenden, weil es scheint, aktualisiert zu werden. Das einzige Problem, das ich habe, ist, wenn ich versuche, ein Protokoll herauszuholen, indem ich dieses dem startInfo. arguments hinzufüge: quotgtgt C: WSMGMTBinaLogName. logquot Kranke stecken Sie weg weg weg. Danke für die Links. Mittwoch, Februar 04, 2015 1:07 AM Wahrscheinlich müssen Sie die Ausgabe selbst mit startInfo. RedirectStandardOutput etc. abfangen. Die Dokumentation erklärt, wie es geht. Um zu vereinfachen, erstellen Sie eine Batchdatei (.BAT) mit einer einzelnen Zeile mit vollständigem Befehl. Dann starten Sie es mit Process-Klasse. Wenn es funktioniert, dann erstellen Sie die Batch-Datei programmgesteuert in temporären Ordner (Path. GetTempPath), dann entfernen Sie es nach Process. WaitForExit. Im Blick in diese jetzt, rannte ich über gestern, aber vergessen zu gehen zurück und werfen Sie einen Blick. Ill zurück zu Ihnen auf diesem. Ich denke, das WSMGMT ist im Besitz von quotTrustedInstallerquot, so dass auch lokale Administratoren können nicht schreiben, um es (aus Sicherheitsgründen), ohne Eigentum zu nehmen. Betrachten Sie die Natur des WSMGMT-Ordners, die Route zu quottake ownershipquot ist nicht eine gute Wahl, da es Dateien, die am besten aus der Reichweite von Kinderquot (/ Witz). Ich glaube, es ist besser für Sie, um einen neuen Ordner zu erstellen, um die Protokolldateien zu speichern. Mittwoch, Februar 04, 2015 2:52 AM Danke, ich habe Sie startInfo. RedirectStandardOutput und dies wird alles, was ich brauche zu erfassen. Es ist eine großartige Alternative und gab mir viele andere Ideen. Obwohl ich nicht brauchen, um nichts aus einer BAT-Datei laufen. Ich kann nur die Ausgabe in eine Datei als auch. Ich schätze die Hilfe. Kudos zu Ihnen. Bearbeitet von TheInfamousOne17 Freitag, 6. Februar 2015 19:30 Uhr Freitag, 06. Februar 2015 07:28 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 Helfen Sie uns, MSDN zu verbessern. Besuchen Sie unsere Seite Uservoice einreichen und abstimmen Ideen Dev Ressourcen Community Hilfe ProgramsSystem. Diagnostics. ProcessStartInfoClass Assembly Lernzentren: System. dll Namensraum: System. Diagnostics Zusammenfassung Gibt einen Satz von Werten bei einem Prozess verwendet zu starten. C Syntax: public sealed class ProcessStartInfo Anmerkungen 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. den Ausdruck für einen Dokumenttyp 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 von 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. Überladen 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 beispielsweise 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 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: RedirectStandardInput (read-write) Zusammenfassung Ruft einen Wert ab, der angibt, ob die Prozeßbefehleingabe vom 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 Prozessausgabe 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 an 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 mit einer ausführbaren Datei verknüpft ist und eine standardmäßige offene Aktion aufweist) starten und Operationen mit der Prozedur 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 Bestandteil der Systempfadvariablen ist, ist es nicht nötig, die Verzeichnisposition in dieser Eigenschaft zu wiederholen.


No comments:

Post a Comment