Saturday 22 July 2017

Useshellexecute 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 ist eine einfache einfache quotHello Worldquot Konsole Anwendung. Und die Ausgabe sieht typischerweise so aus (mit unterschiedlicher Menge an Iterationen vor dem Absturz): Irgendwelche Ideen, warum dies geschieht, und wenn es irgendeine Korrektur für diese (außer Putting Schlaf in den Code) Freitag, 8. Januar 2010 3 : 40 PM Der Grund dafür ist, dass, obwohl der Prozess abgeschlossen ist, kann es ein paar Millisekunden für das Betriebssystem zu beenden, um es zu zerstören. Es ist ein Multitasking-Betriebssystem, der versucht, alle gleichzeitig zu bedienen. Unglücklicherweise gibt es keine Möglichkeit zu wissen, wann die Akte nicht mehr gesperrt ist (genau). Wenn Sie WaitForExit haben, erstellen Sie ein Sperrobjekt auf dem Prozessobjekt. Das Prozessobjekt kann nicht zerstört werden, bis das Schloss freigegeben ist und man kann nicht auf etwas warten, das nicht existiert (Huhn und Ei Art von Problem). 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 eine Teilnahme entscheiden, wird Ihnen die Online-Umfrage vorgestellt, wenn Sie die Msdn-Website verlassen. Möchten Sie teilnehmen?

No comments:

Post a Comment