Thursday 9 February 2017

Useshellexecute Waitforexit

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 die process39 stdoutstderr Ausgabe rechts zurück als Eingang senden. Warum. ) Ndash Matthew Piatt Dies ist eine moderne, aufwändige, Task Parallel Library (TPL) basierte Lösung für. NET 4.5 und höher. Antwort # 2 am: Juli 23, 2010, 07:50:13 am »Ich Sache, dass dies einfach und besser Ansatz (wir brauchen nicht AutoResetEvent): Antwort # 2 am: Mai 23, 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 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. Ich habe versucht, eine Klasse, die Ihr Problem mit 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. Dann müssen Sie die asynchrone Ausgabe starten, die nach dem Start des Prozesses gelesen wird. Machen Sie also eine Racebedingung, 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 auftritt. 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 tatsächlichen Weise zu erledigen. Process und ProcessStartInfo wurde 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 Rasse Bedingung verpassen könnte. Bitte helfen hier im stecken mit diesem Problem, wo ich versuche, das Feuer der cmd. exe eine Aufgabe ausführen, aber die cmd. exe Datei muss mit gestartet werden Admin-Rechte und i wnt die Datei zu verstecken und auch wenn ich die Prozesseigenschaften ProcessWindowStyle. Hidden. Wie kann ich den Prozess mit admin rechts ausführen und auch das Fenster ausblenden, weil die Minute setze ich UseShellExecute True und kommentieren den Benutzernamen und das Passwort, als es das Fenster verbirgt. Von dem, was ich sammeln kann ist, dass, sobald Sie UseShellExecute false der Code nicht versteckt das Fenster. Siehe mein Codebeispiel unten und es würde wirklich helfen, wenn einige könnte mir zeigen, wie die Prozesse mit admin rechts starten und halten Sie das Fenster versteckt. Freitag, 27. August 2010 14:19 Danke für deinen Beitrag. Nur eine kurze Reflexion, wie über machen einen 2-Schritt-Startprozess als Workaround Schritt 1-Code: Legen Sie die UserShellExecute false, um das runas Verb verwenden. Schritt 2-Code: Setzen Sie die UserShellExecute true, um das Fenster auszublenden. Diese Problemumgehung funktioniert sowohl für die Konsole als auch für die Windows-Anwendung. Die folgenden Informationen helfen Ihnen herauszufinden, die Beziehung zwischen der UseShellExecute. CreateNoWindow. Einstellungen für UserNamePassword und WindowStyle. 1. Entsprechend hier. Wenn die Eigenschaften von Benutzername und Kennwort nicht null sind, wird der CreateNoWindow-Eigenschaftswert ignoriert und ein neues Fenster wird erstellt. 2. Entsprechend hier. UseShellExecute muss false sein, wenn die UserName-Eigenschaft nicht null oder eine leere Zeichenfolge ist oder wenn eine InvalidOperationException ausgelöst wird, wenn die Process. Start (ProcessStartInfo) - Methode aufgerufen wird. 3. Wenn wir UseShellExecute true setzen, um einen Prozess über eine Shell zu starten, ist es die Shell, die entscheidet, wie der Prozess gestartet wird, wird das CreateNoWindow - Flag keine Wirkung haben. 4. Wenn wir UseShellExecute false setzen. Wird die WindowStyle-Eigenschaft keine Auswirkung haben. Einige nützliche Infos. Bitte markieren Sie die richtige Antwort zur richtigen Zeit. Danke, Sam Edited by SamAgain Montag, 30. August 2010 05:58 Verfeinern Als Antwort markiert von ETS Dienstag, August 31, 2010 8:18 AM Ive hatte die gleiche Erfahrung mit UseShellExecute False. Haben Sie versucht, mit StartInfo. CreateNoWindow true sowie Ive lesen die Leute sagen, dass das für Konsole-Anwendungen funktioniert, aber nicht andere Anwendungen, die ihr eigenes Fenster zu zeichnen und ignorieren Sie den Parameter sagen, sie zu verstecken (netframeworkdevnet-base-class-libraryhow-to - Ein-Prozess-in-Hintergrund-ohne-irgendein-windows-10258.shtml). Ich vermute, dass seit Einstellung UseShellExecute auf false Ursachen Eingang und Ausgang auf Ihren Prozess umgeleitet werden, nehmen sie an, Sie würden nicht wollen, um das Fenster zu verstecken, aber ich weiß nicht. Es ist eine Zwangslage. Freitag, 27. August 2010 18:23 Danke für deinen Beitrag. Nur eine kurze Reflexion, wie über machen einen 2-Schritt-Startprozess als Workaround Schritt 1-Code: Legen Sie die UserShellExecute false, um das runas Verb verwenden. Schritt 2-Code: Setzen Sie die UserShellExecute true, um das Fenster auszublenden. Diese Problemumgehung funktioniert sowohl für die Konsole als auch für die Windows-Anwendung. Die folgenden Informationen helfen Ihnen herauszufinden, die Beziehung zwischen der UseShellExecute. CreateNoWindow. Einstellungen für UserNamePassword und WindowStyle. 1. Entsprechend hier. Wenn die Eigenschaften von Benutzername und Kennwort nicht null sind, wird der CreateNoWindow-Eigenschaftswert ignoriert und ein neues Fenster wird erstellt. 2. Entsprechend hier. UseShellExecute muss false sein, wenn die UserName-Eigenschaft nicht null oder eine leere Zeichenfolge ist oder wenn eine InvalidOperationException ausgelöst wird, wenn die Process. Start (ProcessStartInfo) - Methode aufgerufen wird. 3. Wenn wir UseShellExecute true setzen, um einen Prozess über eine Shell zu starten, ist es die Shell, die entscheidet, wie der Prozess gestartet wird, wird das CreateNoWindow - Flag keine Wirkung haben. 4. Wenn wir UseShellExecute false setzen. Wird die WindowStyle-Eigenschaft keine Auswirkung haben. Einige nützliche Infos. Bitte markieren Sie die richtige Antwort zur richtigen Zeit. Das interne Detail ist, dass UseShellExecute nutzt (natürlich) die Win32 ShellExecuteEx API, so dass Sie Kann die docs für das betrachten und sehen, was los ist. Grundsätzlich ist es, als ob Sie die EXE doppelklicken. So würden Sie nicht Privileg kopiert, um den neuen Prozess, und es würde eine Erhöhung Dialog, wenn nötig. Wenn UseShellExecute falsch ist, erhalten Sie die Win32 CreateProcess-API, und das erbt die aktuellen Prozess-Berechtigungen quotCreates einen neuen Prozess und seinen primären Thread. Der neue Prozess läuft im Sicherheitskontext des aufrufenden processquot, um die docs zu zitieren. Und so wird nicht zeigen, ein Höhen-Dialog, nur um ein Beispiel für verschiedene Verhalten. Phil Wilson Mittwoch, den 01. September 2010 um 11:06 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