Ich versuche, ein Programm von PowerShell auszuführen, auf den Ausgang zu warten, dann bekomme ich Zugriff auf den ExitCode, aber nicht viel Glück. Ich möchte nicht verwenden - Wait mit Start-Prozess, da ich einige Verarbeitung benötigen, um im Hintergrund weiterzugehen. Heres ein vereinfachtes Test-Skript: Das Ausführen dieses Skripts wird dazu führen, dass Notizblock gestartet wird. Danach wird das Exit-Code ausgedruckt und es wird wieder gestartet, ohne es zu verwenden. Kein ExitCode ist vorhanden, wenn dies beendet ist: Ich muss in der Lage sein, zusätzliche Verarbeitung zwischen dem Starten des Programms und warten auf es zu beenden, so kann ich nicht nutzen - Wait. Jede Idee, wie ich dies tun kann und immer noch Zugriff auf die. ExitCode-Eigenschaft aus diesem Prozess gefragt Apr 21 12 um 19:23 Es gibt zwei Dinge zu erinnern, hier. Eines ist, das - PassThru-Argument hinzuzufügen und zwei ist, das - Wait-Argument hinzuzufügen. Sie müssen das Warteargument wegen dieses Defekts hinzufügen. microsoftPowerShellfeedbackdetails520554start-process-does-not-return-exitcode-Eigenschaft Sobald Sie dies tun, wird ein Prozessobjekt zurückgegeben und Sie können die ExitCode-Eigenschaft dieses Objekts ansehen. Hier ist ein Beispiel: Wenn Sie es ohne - PassThru oder - Wait laufen lassen, wird es nichts ausdrucken. CarlR Dies ist eine Herausforderung für die Implementierung des Process-Objekts. Die Implementierung der ExitCode-Eigenschaft prüft zunächst, ob der Prozess beendet ist. Aus irgendeinem Grund sieht der Code, der diese Prüfung ausführt, nicht nur die HasExited-Eigenschaft an, sondern überprüft auch, dass der Proces-Handle im Proces-Objekt vorhanden ist und eine Ausnahme auslöst, wenn dies nicht der Fall ist. PowerShell fängt diese Ausnahme ab und gibt null zurück. Ndash Jakub Berezanski 11. Februar um 1: 26Lets lesen, was MSDN darüber sagt: 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 unendliche Zeit zu warten, bis der Prozess beendet wird. Dies kann dazu führen, dass eine Anwendung nicht mehr reagiert. Wenn Sie zum Beispiel CloseMainWindow für einen Prozess anrufen, der über eine Benutzeroberfläche verfügt, wird die Anforderung an das Betriebssystem, den zugehörigen Prozess zu beenden, möglicherweise nicht behandelt, wenn der Prozess geschrieben wird, um seine Nachrichtenschleife niemals einzugeben. Diese Überlastung stellt sicher, dass alle Bearbeitungen abgeschlossen sind, einschließlich der Handhabung von asynchronen Ereignissen für umgeleiteten Standardausgang. Sie sollten diese Überladung nach einem Aufruf der WaitForExit (Int32) Überlast verwenden, wenn die Standardausgabe an asynchrone Ereignishandler umgeleitet wurde. Das ist natürlich für Was macht Sie denken, dass es nicht warten, bis die Note Prozess zu beenden Was sind die Zeichen dafür, was ist der Beweis Freitag, 20. Februar 2009 8:13 PM Nicht sicher, ob dies hat sich vor kurzem geändert, aber wieder in den Tag Anwendungen auf Fenster Mobile nie wirklich geschlossen, wenn Sie die X schlagen, um sie zu schließen, würden sie nur minimieren und weiterlaufen im Hintergrund (das war kein Bug, es war ein Feature, seit dem nächsten Mal starten Sie die App würde es wirklich schnell gestartet werden, yah Ich weiß, wahnsinnig aber wahr), also könnte das sein, warum WaitForExit sich vielleicht seltsam verhält und auf App-Start statt Ausfahrt wartet. Aber dann wieder ist es nur Spekulation auf der Grundlage von Knowlegde von alten Versionen von Windows Mobile. Freitag, den 20. Februar 2009 um 11:03 Uhr Id mag diese Frage aufheben. Im auf Windows Mobile 6 Standard und ich versuche, eine Browser-Instanz zu erzeugen. Ich möchte warten, bis der Benutzer den Browser schließt. Aber WaitForExit kehrt extrem schnell zurück. Hier ist der Code: Prozess p neue Prozess () p. StartInfo. Argumente quotexample-sitequot p. StartInfo. Verb quotOpenquot p. StartInfo. UseShellExecute false p. StartInfo. FileName quotIExplore. exequot p. Start () p. WaitForExit () MessageBox. Show (;Nach der Browser sollte geschlossen sein) Was sollte der richtige Weg sein, um die erwarteten Resuts zu bekommen Montag, 08. Juni 2009 10:45 Uhr Wo Symbol ist. Symbol. AlexB Dienstag, 09. Juni 2009 um 9:58 Uhr Im sehen das gleiche Problem, aber auf XP. Ich denke, der Beweis kann in jedem Debugger gesehen werden (wie ich sehe), oder in irgendeiner Konsolenanwendung (nicht unbedingt auf Mobile) Mittwoch, September 02, 2009 8:35 PM Außer, dass Sie nicht dann ein Prozessobjekt erhalten, das Sie können benutzen. Wenn Sie versuchen, Dim MyProc Als neuer Prozess () myProc Process. Start (quotiexplorequot, quotfinance. yahooqhpsquot Symbol) myProc. WaitForExit () Es kommt immer noch sofort zurück. Mittwoch, September 02, 2009 8:48 PM Problem ist, dass du keine neue Instanz von iexplore. exe startet. Sie erstellen einfach ein neues Fenster auf dem bestehenden Prozess. Meine Vermutung ist iexplore. exe beginnt, sieht eine vorherige Instanz und kommuniziert mit der vorherigen Instanz, so dass es das neue Fenster öffnet, und dann diese Instanz, die Sie begonnen Exits sofort. Also ist das Verhalten richtig und zu erwarten. Blog. voidnish Mittwoch, September 02, 2009 8:52 PM 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 vorgestellt, wenn Sie die Msdn-Website verlassen. Möchten Sie teilnehmen?
Comments
Post a Comment