Wednesday 22 November 2017

Waitforexit Warnt Nicht


Ich füge benutzerdefinierte Action in mein VS2008 Setup-Projekt (MSI-Installationsprogramm). Ich rufe eine Batch-Datei an, um eine Datenbank zu erstellen und diese Dateien zu löschen. Ich habe WaitForExit () aber es wird nicht warten Warum kein Unterschied mit startInfo. UseShellExecute true Der Batch wurde problemlos ausgeführt, da er die Benutzereingabe benötigt und ich y und n für Fragen eingegeben habe. Aber diese Löschaktion ist vor meiner Eingabe passiert. Und ich habe eine Pause am Ende der Batch-Datei. Ich kann den Prozess der Batchdatei sehen. EDIT: Ich habe mehr als 10 Mal getestet, es hat nicht geklappt Nach dem Mittagessen stelle ich noch eine Wartezeit und eine Weile mit HasExited Check ein. Es wird in der while-Schleife schlafen. Ich fand es funktionierte Dann habe ich diesen zusätzlichen Code gelöscht, zurück zu einem WaitForExit. Es scheint Arbeit jetzt. Fragte am 29. September 10 um 17: 18 Ich habe eine Situation, wo ich eine Datei ausführen möchte, und lösche dann die ausführbare Datei, wenn die Ausführung durchgeführt wird. Ich benutze System. Diagnostics. Process. Start (), um die Datei auszuführen, und verwenden Sie. WaitForExit (), um zu warten, bis der Prozess abgeschlossen ist. Ich verwende dann File. Delete (Dateiname), um die ausführbare Datei zu löschen. Das Problem ist, dass manchmal File. Delete mit dem folgenden Fehler fehlschlagen wird: Das führt mich zu glauben, dass irgendwie der Prozess noch am Leben ist und die ausführbare Datei auch dann beendet, wenn der. WaitForExit () - Aufruf zurückgegeben wird. Ich habe andere Threads auf dem Netz gefunden, die das gleiche Verhalten beschreiben, aber ich habe keine gefunden, die mit einer vernünftigen Erklärung oder Lösung für das Problem zu schließen, außer Anregungen der Platzierung eines Sleep (n) nach dem WaitForExit (). Beispiele: Hier ist ein Beispielprogramm, das das Problem für mich reproduziert. Ich habe auf Windows XP und Windows 7 getestet, und sie beide scheitern schließlich irgendwann mit dem gleichen Fehler. Beachten Sie auch, dass die ss. exe-ausführbare Datei eine einfache einfache Hello Worldquot-Konsolenanwendung ist. Und die Ausgabe sieht typischerweise so etwas aus (mit unterschiedlicher Anzahl von Iterationen vor dem Absturz): Irgendwelche Ideen, warum dies geschieht, und wenn es einige Fix für diese (außer Putting Schlaf in den Code) Freitag, 8. Januar 2010 3 : 40 PM Der Grund ist, dass, obwohl der Prozess abgeschlossen ist, kann es ein paar Millisekunden für das Betriebssystem bis zum Ende der Zerstörung dauern. Es ist ein Multitasking-Betriebssystem, nachdem alle, seine versucht, alle zur gleichen Zeit Service. Unglücklicherweise gibt es keine Möglichkeit, zu wissen, wann die Datei nicht mehr gesperrt ist (vorsätzlich). Wenn Sie WaitForExit haben, erstellen Sie ein Sperrobjekt auf dem Prozessobjekt. Das Prozessobjekt kann nicht zerstört werden, bis die Sperre freigegeben wird und Sie können nicht auf etwas warten, das nicht vorhanden ist (Huhn und Eiart von Ausgabe). Also die einzige vernünftige Sache, die Sie tun können, ist immer wieder versuchen, so etwas wie: Als Antwort von Samuel Stanojevic markiert Freitag, 8. Januar 2010 16:20 Bearbeitet von Tergiver Freitag, 8. Januar 2010 16:20 Uhr geändert auf bool, Endlosschleife Fix Freitag, 8. Januar 2010 16.15 Uhr Microsoft führt eine Online-Umfrage durch, um Ihre Meinung über die Msdn-Website zu verstehen. Wenn Sie sich für die Teilnahme entscheiden, wird Ihnen die Online-Umfrage präsentiert, wenn Sie die Msdn-Website verlassen. Möchten Sie teilnehmen

No comments:

Post a Comment