Tuesday, 3 October 2017

Waitforexit Beispiel C V


Denn wenn du einen Prozess indirekt anfängst, bekommst du kein Prozessobjekt (dann in deinem Fall ist der Prozess immer null und die zweite Zeile wirft eine Ausnahme). Lassen Sie mich erklären, was ich meine mit indirekt. Wenn Sie nicht eine ausführbare Datei angeben, aber Sie geben ein Dokument (oder eine Ressource) dann wird es durch ein Shell-Verb ausgeführt werden. In diesem Fall kann ein bestehender Prozess verwendet werden. In diesen Fällen wird Process. Start () null zurückgeben. Erstellen Sie ein leeres Worddokument c: test. docx. Schließen Sie alle Word-Instanzen. Führen Sie Process. Start aus (c: test. docx) Liefert eine Process-Instanz Execute Process. Start (c: test. docx) Liefert null Kann man einfach diese AFAIK Sie cant, weil Prozess nutzt ShellExecuteEx mit einem SHELLEXECUTEINFO Struktur, um den Prozess zu starten. Lesen der SHELLEXECUTEINFO-Dokumentation für hProcess-Feld youll sehen, dass: Ein Handle für die neu gestartete Anwendung. Dieses Mitglied wird auf Rückkehr gesetzt und ist immer NULL, wenn fMask auf SEEMASKNOCLOSEPROCESS gesetzt ist. Selbst wenn fMask auf SEEMASKNOCLOSEPROCESS gesetzt ist, wird hProcess NULL sein, wenn kein Prozess gestartet wurde. Wenn beispielsweise ein zu startendes Dokument eine URL ist und eine Instanz von Internet Explorer bereits ausgeführt wird, wird das Dokument angezeigt. Es wird kein neuer Prozess gestartet, und hProcess wird NULL sein. Hinweis ShellExecuteEx gibt nicht immer ein hProcess zurück, auch wenn ein Prozess als Ergebnis des Aufrufs gestartet wird. Zum Beispiel wird ein hProcess nicht zurückgegeben, wenn Sie SEEMASKINVOKEIDLIST verwenden, um IContextMenu aufzurufen. Beachten Sie, wenn Sie einen neuen Prozess ausführen, nur um eine URL zu öffnen und eine serverseitig generierte Datei zu erhalten, dann sollten Sie Damiens Vorschlag folgen und einen WebClient verwenden. DownloadFile ().How permanent ist WaitForExit (). Ich meine, es gibt irgendetwas eine Alternative, die man tun kann, um das Warten zu brechen, sonst werde ich meinen Thread in einer separaten Funktion ausführen und es durch globale Variablen steuern. Grund - ein CMD. EXE-Thread, mit einer Konsolen-Anwendung läuft, die wir vor dem Faden, der seinen Kurs läuft, abbrechen muss. Hier ist was wir haben: ProcessStartInfo psi new ProcessStartInfo (quotCMD. EXEquot, query) psi. UseShellExecute useShellExec psi. RedirectStandardOutput stdout psi. CreateNoWindow noWindow hbProc new Process () hbProc Process. Start (psi) hbProc. WaitForExit () Nun, könnte man Verwenden Sie: while (hbProc. WaitForExit (someTimeout)) if (ShouldCancel) brechen am Sep 19, 5:15 am, quotMarc Gravellquot ltmarc. grav. Gt schrieb: gt Nun könnten Sie: gt gt while (hbProc. WaitForExit (someTimeout)) gt if (ShouldCancel) brechen gt gt gt gt Marc (beachten Sie, es gibt keinen Grund, den neuen Prozess () und den Prozess aufzurufen. Start (psi) Oder du könntest: hbProc new process () hbProc. EnableRaisingEvents true hbProc. Exited new EventHandler (functionToCallAfterProcesit) hbProc. StartInfo psi hbProc. Start () andere Thread - on will das Ereignis abbrechen: hbProc - new EventHandler ( FunctionToCallAfterProcesit) In jedem Fall ist nur bewusst sein, die potenzielle Race-Bedingung zwischen dem Prozess verlassen und der Wunsch, das Warten abzubrechen. Am 19. September, 4:11 Uhr, Alistair George ltnon xtra. co. nzgt schrieb: gt Wie dauerhaft ist WaitForExit () Ich meine, es gibt alles was gt Alternative kann man tun, um das Warten zu brechen, sonst werde ich meinen Thread gt in einer separaten Funktion laufen und kontrolliere es durch globale Variablen. Gt Reason - ein CMD. EXE Thread mit einer Konsole Anwendung laufen, die wir gt müssen, um vor dem Faden, der seinen Kurs läuft, zu stornieren. Gt Hier ist was wir haben: gt ProcessStartInfo psi new gt ProcessStartInfo (quotCMD. EXEquot, Abfrage) gt psi. UseShellExecute useShellExec gt psi. RedirectStandardOutput stdout gt psi. CreateNoWindow noWindow gt hbProc new Process () gt hbProc Process. Start (psi) gt HbProc. WaitForExit () gt gt Danke, gt Alistair. Sie können entweder den Thread mit WaitForExit () töten oder die Überladung verwenden, mit der Sie ein Timeout bool WaitForExit (int msToWait) angeben können. Wenn du es in einem separaten Thread betreibst und es töten wirst du eine unterbrochene Ausnahme bekommen. Vielleicht möchten Sie sicherstellen, dass der Prozess, den Sie begonnen haben, nicht noch läuft (wenn es ist, töte es). Gt Du kannst entweder den Thread mit WaitForExit () töten oder die gt-Überladung verwenden, mit der du einen Timeout bool WaitForExit (int gt msToWait) angeben kannst. Wenn Sie es in einem separaten Thread laufen und es töten, werden Sie eine unterbrochene Ausnahme bekommen. Vielleicht möchten Sie sicherstellen, dass der gt-Prozess, den Sie begonnen haben, nicht noch läuft (wenn es ist, töte es). Gt Danke Jungs mit den Vorschlägen, die nützlich sind. Wird raten, welche Option am besten funktioniert Al Copyright Kopie 2005-2016, TechTalkz. Alle Rechte vorbehalten.

No comments:

Post a Comment